『たのしいRuby 第3版』正誤表

p.31 List 1.9

Ruby 1.9.2からカレントディレクトリ(「.」)が$LOAD_PATH(p.374)から外されました。 use_hello.rbは、カレントディレクトリに置かれたライブラリを利用するサンプルなので、 Ruby 1.9.2以降を使っている場合はここに書かれている方法では実行することができません。 以下のいずれか方法で対応してください。

  1. requireメソッドの引数でディレクトリパスを明示する。

    require "./hello"    # hello.rbの読み込み(「.rb」は必要ない)
    hello()              # helloメソッドの起動
    
  2. Rubyを実行する際に-Iオプション(p.366)でカレントディレクトリを指定する。

    [実行例]
    > ruby -I . use_hello.rb
    Hello, Ruby.
    
  3. requireメソッドではなく、require_relativeメソッドでライブラリを読み込む。

    require_relative "hello"  # hello.rbの読み込み(「.rb」は必要ない)
    hello()                   # helloメソッドの起動
    

最初の2つの例では、Rubyを実行したときのカレントディレクトリを検索する指定を追加していますが、 require_relativeメソッドはこのメソッドを呼び出したファイル(この場合はuse_hello.rb)が置かれた ディレクトリからの相対パスでライブラリを検索するため意味が異なります。

単にプログラムを複数のファイルに分割して作成するようなケースでは、 実行時にどのようなパス名でライブラリを参照するか気にする必要がないため、 require_relativeメソッドが便利です。

require_relativeメソッドはRuby 1.9.0から提供されています。 このメソッドは「たのしいRuby」の本文では紹介していません。

p.102 フローチャート中の条件 (第5刷で修正)

フローチャートの一番右の条件が「i == 4 ?」となっていますが「i == 3 ?」の誤りです。

p.136 List 8.7 (第3刷で修正)

Ponitクラスのswapメソッドの3行目を以下のように修正してください。

    def swap(other)       # x, yの値を入れ換えるメソッド
      tmp_x, tmp_y = @x, @y
      @x, @y = other.x, other.y
誤    other.x, other,y = tmp_y, tmp_x   # 同一クラス内では
正    other.x, other.y = tmp_x, tmp_y   # 同一クラス内では
                                        # 呼び出すことができる
      return self
    end

p.150 箇条書きの(4)(5) (第5刷で修正)

クラス名が誤っています。

誤 (4)..,、応答メッセージを表現するNet::HTTPResposeオブジェクトに格納する
  (5)Net::HTTPResposeオブジェクトの機能によって...

正 (4)..,、応答メッセージを表現するNet::HTTPResponseオブジェクトに格納する
  (5)Net::HTTPResponseオブジェクトの機能によって...

p.178 表10.3 (第3刷で修正)

Math.atan2メソッドの引数の表記が誤っています。

誤 atan2(x)

正 atan2(x, y)

p.216 練習問題(3)の設問 (第3刷で修正)

設問の括弧の中の例が誤っています。

誤 (1)の配列から3の倍数だけを取り出した,新しい配列a3を作ってください(a3[0]は1,a3[2]は4になります)。

正 (1)の配列から3の倍数だけを取り出した,新しい配列a3を作ってください(a3[0]は3,a3[2]は9になります)。

p.389 本文1行目 (第3刷で修正)

本文の1行目の終わりから2行目にかかる文を以下の訂正します。

誤 新しいの有効範囲を作るために

正 新しい有効範囲を作るために