Ruby中收益率和收益率的使用

Ruby中收益率和收益率的使用,ruby,block,Ruby,Block,有人能帮我弄清楚在Ruby中使用收益率和回报率的原因吗。我是一个Ruby初学者,所以非常欣赏简单的例子 提前谢谢你 yield用于调用与方法关联的块。您可以通过将块(基本上只是代码放在大括号中)放在方法及其参数之后来完成此操作,如下所示: [1, 2, 3].each {|elem| puts elem} def hello return :hello if some_test puts "If it some_test returns false, then this message

有人能帮我弄清楚在Ruby中使用收益率和回报率的原因吗。我是一个Ruby初学者,所以非常欣赏简单的例子


提前谢谢你

yield
用于调用与方法关联的块。您可以通过将块(基本上只是代码放在大括号中)放在方法及其参数之后来完成此操作,如下所示:

[1, 2, 3].each {|elem| puts elem}
def hello
  return :hello if some_test
  puts "If it some_test returns false, then this message will be printed."
end
return
退出当前方法,并使用其“参数”作为返回值,如下所示:

[1, 2, 3].each {|elem| puts elem}
def hello
  return :hello if some_test
  puts "If it some_test returns false, then this message will be printed."
end
但是请注意,您不必在任何方法中使用return关键字;如果Ruby没有遇到返回,它将返回最后一条经过计算的语句。因此,这两者是等价的:

def explicit_return
  # ...
  return true
end

def implicit_return
  # ...
  true
end

下面是一个
收益率
的示例:

# A simple iterator that operates on an array
def each_in(ary)
  i = 0
  until i >= ary.size
    # Calls the block associated with this method and sends the arguments as block parameters.
    # Automatically raises LocalJumpError if there is no block, so to make it safe, you can use block_given?
    yield(ary[i])
    i += 1
  end
end

# Reverses an array
result = []     # This block is "tied" to the method
                #                            | | |
                #                            v v v
each_in([:duck, :duck, :duck, :GOOSE]) {|elem| result.insert(0, elem)}
result # => [:GOOSE, :duck, :duck, :duck]
还有一个
return
的示例,我将使用该示例实现一个方法来查看数字是否为:

类数值
#这不是该计划的真正内容
def平方和
(to|s.split(“”)。收集{s|s.to|i**2})。注入(0){sum,i|sum+i}
结束
def happy?(缓存=[])
#如果数字达到1,那么它是快乐的。
如果self==1,则返回true
#我们不能高兴,因为我们开始循环了
如果缓存包含(self),则返回false
#询问下一个号码是否满意,并将self添加到看到的号码列表中
#你实际上不需要退货(没有退货就行);我只是为了对称而加上它
返回平方和。快乐?(缓存错误)
19.高兴吗?#=>真的吗
2.高兴吗?#=>错
1.高兴吗?#=>真的吗
#……等等。。。

希望这有帮助!:)

return语句的工作方式与它在其他类似编程语言上的工作方式相同,它只是从它所使用的方法返回。 您可以跳过对return的调用,因为ruby中的所有方法都会返回最后一条语句。因此,您可能会发现这样的方法:

def method
  "hey there"
end
def method 
  puts "do somthing..."
  yield
end
method do
   puts "doing something"
end
这实际上与做类似的事情是一样的:

def method
  return "hey there"
end
另一方面,
屈服
超出了作为方法参数给出的块。因此,您可以使用如下方法:

def method
  "hey there"
end
def method 
  puts "do somthing..."
  yield
end
method do
   puts "doing something"
end
然后像这样使用它:

def method
  "hey there"
end
def method 
  puts "do somthing..."
  yield
end
method do
   puts "doing something"
end
其结果是在屏幕上打印以下两行:

"do somthing..."
"doing something"
希望这能把事情弄清楚一点。有关区块的更多信息,请查看


yield关键字指示Ruby在块中执行代码。在本例中,块返回字符串
“yes!”
cool()
方法中使用了显式返回语句,但这也可能是隐式的。

到块的链接是breaknhere的好链接@Jwosty应该是
def happy?(cache=[])
?@aᴍɪʀ谢谢,修好了