2017-02-02 36 views
1

これが可能かどうか疑問に思っていましたか?ブロックをマップ関数に渡す

info = arrange_info({|x| [x.name, x.number]}, info_array) 

def arrange_info(block, info) 
    info.map(block).to_h 
end 

これは、私はそれが今では動作しません持っているが、どのようにこの可能性のようなもので、私は配列が異なった方法で配置する異なるブロックを渡すことができるようになりますか?

答えて

2

ブロックはメソッドの引数として渡すことができますが、最後にする必要があります。それが定義されている前に、あなたはまた、メソッドを呼び出すことはできません:エリックの答えに追加

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} 
0

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 

後者のことを回避する同等です。

関連する問題