『Elixir実践ガイド』正誤表

2021/02/07

『Elixir実践ガイド』読者サポートページへ戻る

第1刷

第5章

5-2-7 「パイプ演算子(1)」

p.64 第2段落
誤 第2のパイプ演算子は左辺から2を受け取り
正 第2のパイプ演算子は左辺から4を受け取り
誤 第3のパイプ演算子は左辺から4を受け取り
正 第3のパイプ演算子は左辺から8を受け取り

第8章

8-3-4 「キーワードリスト形式による名前付き関数の定義」

p.121 第2段落
誤 マクロ呼び出しの後ろにdo/endブロック
正 マクロ呼び出しの第1引数の後ろにdo/endブロック

第9章

9-1-2 「パブリック関数とプライベート関数」のリスト9-3

修正前

6 + IO.inspect(MyMode.func(2))
7   IO.inspect(MyMode.func(1))

修正後

6 - IO.inspect(MyMode.func(1))
6 + IO.inspect(MyMode.func(2))

9-1-3 「プライベート関数はリモート呼び出しできない」のリスト9-4

修正前

6 - IO.inspect(MyMode.func(2))
6   IO.inspect(MyMode.func(1))

修正後

6 - IO.inspect(MyMode.func(2))
6 + IO.inspect(MyMode.func(1))

9-3-1 「他のモジュールの関数とマクロをモジュール名なしで呼ぶには」

リスト 9-16 の1行目 (p.135)
誤 IO.inspect(MyMod2.expt())
正 IO.inspect(MyMod2.experiment())
リスト 9-16 の行番号 (p.135)
誤 1, 2
正 14, 15
Column「スクリプト内でimportディレクティブを使用するときの注意事項」の第1段落

修正前

スクリプト内でモジュールを定義したとき、モジュール定義の外側でimportディレクティブによってそのモジュールの関数やマクロを取り込もうとすると例外CompileErrorが発生します。

修正後

スクリプト内でimportディレクティブを用いると指定したモジュールの関数やマクロをモジュール名なしで使えるようになります。しかし、スクリプト内であるモジュールを定義し、その後でそのモジュールをインポートしようとすると例外CompileErrorが発生します。

第10章

10-2 「ifマクロ」

この節全体で関数Integer.mod/2を用いているが、すでに第4章と第5章で使用した関数Kernel.rem/2を使うべきであった。両者の違いが説明されていないので読者は戸惑う。なお、関数Integer.mod/2は剰余演算(モジュロ演算)を行う関数である。2つの引数がどちらも0以上の値であれば、関数Kernel.rem/2と働きは同じである。

10-2-2 「ifマクロの誤った使い方」末尾のコラム (p.148-149)

誤 ターミナルで上記のコード実行すると
正 ターミナルで上記のコードを実行すると

10-2-5 「do/else/endブロックの正体」 (p.153)

誤 else と end に囲まれた式を :do オプションに
正 else と end に囲まれた式を :else オプションに

第12章

12-4-3 「リストから要素を削除する」 の図12-6 (p.184)

図中で点線で囲まれた「w」は「y」が正しい。

第25章

25-1-6 「キャプチャ演算子を使って書き直す」の最終段落(p.399)

誤 9-2-3 キャプチャ演算子を用いて無名関数を作る(2) 参照
正 9-2-4 キャプチャ演算子を利用する上での注意事項 参照

25-2-3 「メッセージを送る」のソースコード引用 (p.404)

誤 Process.send(Console, :process_command, [])
正 Process.send(__MODULE__, :process_command, [])

25-2-5 「コマンドを解析する」のリスト25-5の23行目 (p.407)

誤 _ -> IO.puts("UNKOWN COMMAND")
正 _ -> IO.puts("UNKNOWN COMMAND")

第28章

28-1-5 「Gridモジュールのテスト」のリスト28-4の45行目(p.455-456)

誤 describe "get_winner" do
正 describe "get_winner/1" do

付録

第9章の解答

問題2
誤 &(Enum.join([&1, &2, &3))
正 &Enum.join([&1, &2, &3])

「誤」の表記でも誤りではないが、9-2-3「キャプチャ演算子を用いて無名関数を作る(2)」の末尾にある注記で後者の方が標準的な書き方としたことと整合しない。

問題3 (欠落)
  1. fn x -> x end
  2. fn x, y -> x * y end
  3. fn x -> rem(x, 10) end
  4. fn x -> {x, x + 1} end

ペーパーバック版のみ。