2013-02-27 204 views
0

其他方法的參數傳遞方法,我感興趣的如何通過方法與紅寶石參數。我需要通過靈活的功能設置來實現類似命令模式的功能。示例=> C#中的lambda函數。與紅寶石

+1

我不明白你的問題,你能否給我們提供一個例子? – Intrepidd 2013-02-27 17:59:43

回答

2

紅寶石lambda功能定義如下:

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 
0

可以動態調用它們的參數列表以及方法。以下只是其中一種方式:

class Foo 
    def foo(what) 
    puts what 
    end 
end 

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

而@ coedit的迴應是另一種方式.. :) – 2013-02-27 18:07:18

+0

好的,這是有趣的一點。但我怎樣才能將代碼傳遞給另一個方法並從那裏調用它?你能否提供一些簡單的例子。 – Ph0en1x 2013-02-27 20:32:56

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 2013-02-27 20:39:58