🍣

Ruby Silverまとめ3

に公開

Ruby Silver学習中に難しかった問題です。
勉強会でこの問題について話したり、スクールのメンターさんに見ていただいたりして自信がついたので、お蔵入りしてましたが公開します。

空白のある場合の動き

以下、RExより引用。
コード1と2でなんと出力結果が違うのです。それぞれなんと出力されるでしょうか?

# コード1
def foo(n)
  n ** n
end
puts foo (2) * 2

# コード2
def foo(n)
  n ** n
end
puts foo(2) * 2

選択肢

  • 8と表示される
  • 256と表示される
  • 16と表示される
  • nilと表示される
答え

答え

  • コード1:256
  • コード2:8

解説

  • メソッド名とカッコの間にスペースがあるかどうかで意味が変わる

コード1

def foo(n)
  n ** n
end
puts foo (2) * 2
  • foo (2) * 2と空白が入っていると、(2) * 2 という 式全体 が foo の引数になる。
    • つまり、foo( (2) * 2 )と解釈される。
  • 計算の流れ
    • (2) * 2 を計算 → 4
    • foo(4) を呼ぶ → 4 ** 4 = 4 * 4 * 4 * 4 = 256
    • puts 256 → 画面に 256 と表示

コード2

def foo(n)
  n ** n
end
puts foo(2) * 2

これはシンプルに:

  • foo(2)2 ** 2 = 4
  • 4 * 2 = 8

参考文献

Discussion