標準ライブラリに同様の機能が欲しいと思うことがあります。名前は、たとえば、with
またはwith_it
(以前のコードを新しい名前で繰り返す)
class Object
def with_it(&block)
block.call(self)
end
end
使用例:
x = [1, 2, 3, 4, 5].map {|x| x * x }.with_it do |list|
head = list.unshift
list << head * 10
list.join " / "
end
とは対照的に:
list = [1, 2, 3, 4, 5].map {|x| x * x }
head = list.unshift
list << head * 10
x = list.join " / "
後者の方が理解しやすいですが、前者には変数list
とhead
スコープを保持するという利点がありx
、私の意見では、への割り当てはより明確です (への割り当てx
はコードの最後の行に挿入する必要があります)。コードがより大きなメソッドの一部である場合、スコープは有益です。
したがって、使用する別のオプションwith_it
は、コードを別のメソッドに入れることです。例えば:
def mult_head_and_join(list)
head = list.unshift
list << head * 10
list.join " / "
end
x = mult_head_and_join [1, 2, 3, 4, 5].map {|x| x * x }
ここで何を結論付ければよいかわかりませんが、 with_it を標準ライブラリに含めることに投票したいと思います