久野靖:Ruby による情報科学入門

作成日 : 2023-03-07
最終更新日 :

概要

「まえがき」から引用する。

さて,この本がどのような人を対象にしているかというと「コンピュータの仕組みに興味を持っている人」 ということになるでしょうか。

本書の題名には Ruby の文字があるが、前半 3/4 のプログラムは Ruby で書かれているが、 後半 1/4 は Ruby ではなく Java で書かれている。注意されたい。 また、Ruby や Java のバージョンは明示されておらず、またこれらの言語のインストールについても書かれていない。

感想

現在の Ruby や Java では少し挙動が異なるので記しておく。Windows の irb 1.4.1 および ruby 3.1.1. で確かめている。

p.96 のプログラムで、addspeed というメソッドが次で定義されている。

def addspeed(d)
  @speed = @speed + d
  puts('speed = ' + @speed)
end

インスタンス変数 @speed は 0.0 で初期化されている。そのため、puts メソッドを実行しようとすると、次のエラーが出る。

irb(main):003:0> a.addspeed(5.0)
dog.rb:15:in `+': no implicit conversion of Float into String (TypeError)
irb(main)from dog.rb:15:in `addspeed'
        from (irb):3:in `<main>'
        from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
        from C:/Ruby31-x64/bin/irb:33:in `load'
        from C:/Ruby31-x64/bin/irb:33:in `<main>'
irb(main):004:0>

そのため、次のように明示的に @speed を文字列に変換する必要がある。

def addspeed(d)
  @speed = @speed + d
  puts('speed = ' + @speed.to_s)
end

p.97 のプログラムで、Rational という有理数のクラスを実装した結果を p.98 の irb で確認しているが、 このままでは次のエラーが発生する。

irb(main):002:0> a = Rational.new(3, 5)
(irb):2:in `<main>': undefined method `new' for Rational:Class (NoMethodError)
        from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
        from C:/Ruby31-x64/bin/irb:33:in `load'
        from C:/Ruby31-x64/bin/irb:33:in `<main>'
irb(main):003:0>

これは、現在の Ruby には組み込みライブラリで Rational がすでに存在するため、これと衝突したのが原因である。 本書のクラスを別の名前で、たとえば MyRational のように定義すれば正しく動作する。

誤植

場所備考
p.103 中ほどこの演習も Relation クラスのメソッドを この演習も Rational クラスのメソッドを

書誌情報

書名Ruby による情報科学入門
著者久野靖
発行日2008 年 12 月 25 日 初版発行
発行所近代科学社
発売元オーム社
定価2300 円(税別)
サイズ
ISBN978-4-7649-0362-3
備考越谷市立図書館で借りて読む
NDC

まりんきょ学問所コンピュータの部屋コンピュータの本全般・読み物 > 久野靖:Ruby による情報科学入門


MARUYAMA Satosi