2017-02-02 7 views
1

이와 같은 것이 가능한지 궁금합니다.블록을 맵핑하여 전달

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

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

이것은 내가 지금 작동하지 않습니다,하지만 방법이 가능합니다 같은 것입니다, 나 배열이 다른 방법이다 마련하기 위해 다른 블록을 전달할 수 있도록 것인가?

답변

2

블록은 메서드 인수로 전달 될 수 있지만 마지막 인수 여야합니다. 이 정의되기 전에 당신은 또한 메소드를 호출 할 수 없습니다

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

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

여기에 작은 테스트입니다 :

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 

def arrange_info(info) # takes a block 
    info.map { |each| yield each }.to_h 
end 

후자을 피 동등하다.