2013-02-27 156 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