2013-02-27 2 views
0

루비에서 인자를 가진 메소드를 전달하는 방법에 흥미 롭습니다. 유연한 기능 설정으로 명령 패턴과 같은 것을 구현해야합니다. Example => C#의 람다 함수. 당신은 동적으로 인수 목록과 함께 메소드를 호출 할 수루비의 다른 메소드에서 인자를 가진 메소드 전달하기

a.lambda{ puts "Hello"} 
    a.call #=> Hello 

    a = lambda{|str| puts str } 
    a.call("Hello world !!!") #=> Hello world !!! 

    a = lambda{|*args| puts args.join(' ')} 
    a.call("Hello", "World") #=> Hello World 
+1

귀하의 질문을 이해할 수 없습니다. 예제를 제공해 주시겠습니까? – Intrepidd

답변

2

루비 lambda 기능이 정의되어 있습니다. 아래는 그 중 하나 일뿐입니다.

class Foo 
    def foo(what) 
    puts what 
    end 
end 

Foo.new.send(:what, "something") # ==> "something" 
0

다음과 같이

+0

그리고 @ coedit의 응답은 또 다른 방법입니다. :) –

+0

좋아, 그게 재미있는 지적이야. 하지만 다른 메소드에 코드를 전달하고 거기에서 호출하는 데 어떻게 사용할 수 있습니까? 몇 가지 간단한 예제를 제공해 주시겠습니까? – Ph0en1x

1

블록을 사용하여 Ruby에서 대부분의 작업을하는 방식으로 명령 패턴을 수행 할 수 있습니다.

class Soldier 

    def initialize(&block) 
    @command = block 
    end 
    def action 
    @command.call if @command 
    end 

end 

s = Soldier.new do #the block 
    line = "We are drill machines, drill machines feel no pain" 
    2.times{ puts line } 
    puts line.upcase 
end 

puts "Action:" 
s.action 
+0

수확기 건설을 사용할 수도 있습니까? – Ph0en1x

관련 문제