2012-08-07 4 views
-1

나는 누군가의 루비 코드를 검토하고있어 그 안에 그들은 비슷한 작성했습니다 :& : aFunction의 &는 무엇을하고 있습니까?

class Example 
    attr_reader :val 
    def initialize(val) 
    @val = val 
    end 
end 

def trigger 
    puts self.val 
end 

anArray = [Example.new(10), Example.new(21)] 
anArray.each(&:trigger) 

:trigger는 심볼이 촬영 수단과 &proc로 변환을?

그렇다면 self.을 사용하는 것 외에 변수를 트리거로 전달하는 방법이 있습니까?

이 관련 그러나 대답하지 않습니다 : http://www.ruby-forum.com/topic/198284#863450

+1

관련 질문 : HTTP : // 유래합니다. com/questions/1217088/what-does-mapname-mean-in-ruby –

+0

감사합니다. @AndrewGrimm. – AJP

+0

관련 항목 : http://stackoverflow.com/questions/23695653/can-you-supply-arguments-to-the-mapmethod-syntax-in-ruby –

답변

2

가 트리거로 변수를 전달하는 어떤 방법입니다

번호

당신은 인수를 지정할 수 없습니다 Symbol#to_proc를 호출하고 있습니다. Ruby는 인수가없는 메소드 호출을 위해 특별히 제공되는 편리한 설탕 비트입니다. 당신이 인수를 원하는 경우

, 당신은 전체 블록 구문을 사용해야합니다 :

anArray.each do |i| 
    i.trigger(arguments...) 
end 
+0

문서에서이 파일을 찾을 수 없습니다. 어떻게이 파일을 배웠습니까/내가 직접 배울 수 있습니까? 감사. – AJP

+0

Google "기호 to_proc" 두 번째 링크는 [문서] (http://www.ruby-doc.org/core-1.9.3/Symbol.html#method-i-to_proc)입니다. – meagar

+0

니스, 나는 그 문서에서'(& : tos)'를 포함하여 아무것도 찾지 않고'& :'만을 시도하고있었습니다. – AJP

2

Symbol#to_proc 매개 변수없이 메소드를 호출에 대한 바로 가기입니다. 매개 변수를 전달해야하는 경우 전체 양식을 사용하십시오.

[100, 200, 300].map(&:to_s) # => ["100", "200", "300"] 
[100, 200, 300].map {|i| i.to_s(16) } # => ["64", "c8", "12c"] 
0

이 정확하게 당신이 필요 할 것입니다 :

def trigger(ex) 
    puts ex.val 
end 

anArray = [Example.new(10), Example.new(21)] 
anArray.each(&method(:trigger)) 
# 10 
# 21 
관련 문제