「まえがき」から引用する。
さて,この本がどのような人を対象にしているかというと「コンピュータの仕組みに興味を持っている人」 ということになるでしょうか。
本書の題名には 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 円(税別) |
サイズ | |
ISBN | 978-4-7649-0362-3 |
備考 | 越谷市立図書館で借りて読む |
NDC |
まりんきょ学問所 > コンピュータの部屋 > コンピュータの本 > 全般・読み物 > 久野靖:Ruby による情報科学入門