我正在使用一个以块作为参数的方法。我是Ruby和Blocks的新手,所以我不太明白如何创建一个Block并将其传递给方法。能否请您举例说明如何创建一个块并将其作为参数传递?
更新:以下是我要调用的方法示例:
def exec!(commands, options=nil, &block)
# method code here
# eventually it will execute the block if one was passed
end
以下是我目前正在调用此方法的方法:
@result = ssh.exec!("cd /some/dir; ls")
如何将块作为第三个参数传递给exec!
方法?
答案 0 :(得分:3)
这部分取决于您希望如何使用它。如果符合您的使用需求, easy 方式就是这样:
@result = ssh.exec!("cd /some/dir; ls") do |something|
# Whatever you need to do
# The "something" variable only makes sense if exec! yields something
end
或者
@result = ssh.exec!("cd /some/dir; ls") { |something| puts something }
当块很短时,通常使用{}
表示法。
您还可以创建Proc
或lambda;最终“正确”的答案取决于你想要做什么。
如果你在谈论Net :: SSH,请注意an example。
答案 1 :(得分:1)
还有一件事。您还可以创建Proc-object(或任何具有'to_proc'方法的对象)并使用'&'作为最后一个参数调用您的方法作为最后一个参数它之前的符号。例如:
proc = Proc.new { |x| puts x }
%w{1 2 3}.each(&proc)
做同样事情的其他方式:
%w{1 2 3}.each { |x| puts x }
答案 2 :(得分:0)
如何使用关键字 yield 来理解传递块参数?
例如我们有:
def our_method
puts "we're going to call yield operator"
yield "this is message from our_method"
puts "we called the yield operator"
end
our_method { |message| puts message }
我们会得到这个结果:
we're going to call yield operator
this is message from our_method
we called the yield operator
它是如何工作的?
当我们调用 our_method 时,我们也将参数传递给它,在我们的例子中它是一个块 -
{ |message| puts message }
。
在 our_method 中,它会执行第一个字符串并打印“我们将调用yield operator”。
然后轮到 yield 运算符。它几乎等同于block.call
但除此之外,它将消息作为参数传递给块。
这就是该块将从our_method打印字符串的原因。
最后,our_method打印最终字符串“我们称之为yield运算符”。