Rubyのyieldの挙動が理解できていません。
以下がサンプルコードになります。
def with_current_time yield Time.now end with_current_time do |now| now.year end
このコードを動かすと
2017と表示されます。
with_current_time do |now| now.year end
でメソッドを呼び出し。
yieldでブロックの中を呼び出す。
つまりブロックの中 = now.year を呼び出しているのだと考えました。
しかしyieldでnow.yearを呼び出してもエラーになると思います。
yieldの後にTime.nowが関連しているのでしょうか?
そのまま見たままだと、
yieldでnow.yearを呼び出し。
その後に続くTime.nowを呼び出し。
に受け取れます。
しかし挙動的にはTime.now.yearですよね?
何故でしょうか?
また呼び出す側としても
with_current_time do |now| now.year end
となっており |now|
が付いているのは何故でしょうか?
array.each do |array1| puts array1 end
となって配列の中身が一つづつ格納されている使い方は分かるのですが、
今回の||の使い方は分かりませんでした。合わせて教えて頂けるとありがたいです。
def with_current_time
yield Time.now
end
with_current_time do |now|
now.year
end
お二方回答ありがとうございます。
最初に勘違いしていたのは
yield Time.nowは
yield(Time.now)
という形だったのですね。
呼び出し順としては
with_current_time do |now| now.year end
で、now.yearをブロックとしてメソッド(with_current_time)に渡す。
メソッド内のyield(Time.now)でyieldを呼び出し。
ここでのyield は now.year
引数で渡ってきたTime.nowは
with_current_time do |now| now.year end
|now|が受け取る。
つまりnowはTime.nowになっている。
繋げてメソッドを読んで
Time.now.year
ということで間違いないでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/06 05:33
2017/10/06 12:35
2017/10/06 18:05
2017/10/07 00:07
2017/10/10 03:17
2017/10/10 06:06
2017/10/12 08:00
2017/10/13 23:30
2017/10/17 03:20