これが可能かどうか疑問に思っていましたか?ブロックをマップ関数に渡す
info = arrange_info({|x| [x.name, x.number]}, info_array)
def arrange_info(block, info)
info.map(block).to_h
end
これは、私はそれが今では動作しません持っているが、どのようにこの可能性のようなもので、私は配列が異なった方法で配置する異なるブロックを渡すことができるようになりますか?
これが可能かどうか疑問に思っていましたか?ブロックをマップ関数に渡す
info = arrange_info({|x| [x.name, x.number]}, info_array)
def arrange_info(block, info)
info.map(block).to_h
end
これは、私はそれが今では動作しません持っているが、どのようにこの可能性のようなもので、私は配列が異なった方法で配置する異なるブロックを渡すことができるようになりますか?
ブロックはメソッドの引数として渡すことができますが、最後にする必要があります。それが定義されている前に、あなたはまた、メソッドを呼び出すことはできません:エリックの答えに追加
class X
def initialize(name, number)
@name = name
@number = number
end
attr_reader :name, :number
end
def arrange_info(info, &block)
info.map(&block).to_h
end
info_array = [X.new('a', 1), X.new('b', 2)]
p info = arrange_info(info_array) { |x| [x.name, x.number] }
#=> {"a"=>1, "b"=>2}
:
def arrange_info(info, &block)
info.map(&block).to_h
end
info = arrange_info(info_array){|x| [x.name, x.number]}
ここで小さなテストです。
これらはオブジェクトとしてブロックを実体
def arrange_info(info, &block)
info.map(&block).to_h
end
def arrange_info(info) # takes a block
info.map { |each| yield each }.to_h
end
後者のことを回避する同等です。