繁体   English   中英

Ruby:如何创建一个块并将其作为参数传递?

[英]Ruby: How to create a block and pass it as an argument?

我正在使用一个以块为参数的方法。 我是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! 方法?

这部分取决于您希望如何使用它。 如果它符合您的使用需求,这是一个简单的方法:

@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,那么就有一个例子

还有一件事。 您还可以创建Proc-object(或任何具有'to_proc'方法的对象)并使用该Proc-object作为最后一个参数调用您的方法,并在其前面加上'&'符号。 例如:

proc = Proc.new { |x| puts x }
%w{1 2 3}.each(&proc)

做同样事情的其他方式:

%w{1 2 3}.each { |x| puts x }

如何使用关键字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 } { |message| puts message }

our_method中它执行第一个字符串并将打印“我们将调用yield运算符”

然后是收益率运算符的转向。 它几乎等同于block.call但除此之外,它将消息作为参数传递给块。 这就是该块将从our_method打印字符串的原因。

最后,our_method打印最终字符串“我们称之为yield运算符”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM