🍣
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