【问题标题】:Implementation of Yield in following ruby codeYield 在以下 ruby​​ 代码中的实现
【发布时间】:2017-10-26 17:28:00
【问题描述】:

我使用和工作于 Java 和 C#。
我被要求在以下 Ruby 代码中解释 Yield。

代码:

mine=15
puts "Mine = 15"

def call_block  
   yield
   yield
puts 'Now for some magic!'  
end

call_block {mine}
print "Mine now is "
puts mine

输出:

mine = 15
now for some Magic!
mine now is 25

问题是如何使用上述代码获得此输出。
我对产量了解不多,这就是为什么没有正确编写代码的原因。
我认为必须在某处添加 10 个,但在哪里?
任何帮助将不胜感激。

【问题讨论】:

  • 您是否阅读过任何在线教程,或搜索过“ruby yield”?你发现了什么?他们为什么不帮忙?
  • 我对产量进行了快速搜索,我了解到这只是一个假想的调用,无论出于何种原因,以后都会更改。我想我看到的例子是他们调用了 yield 并传递了一个变量并说它是一个占位符供以后使用?
  • 你运行代码了吗?它产生什么?您如何更改call_block 的输出以实现目标?
  • z = yield(x,y) 视为z = execute_block(x,y),其中xy 是要分配给块的两个块变量的值,z 是块计算并返回的值.
  • yield 在英语中(在某种意义上)用作动词,表示让路移交。在 Ruby 代码中,我们的意思是让步给块。

标签: ruby yield


【解决方案1】:

{mine} 更改为{mine+=5}yield 只执行了两次。

【讨论】:

  • @sublimeaces 点什么? yield 是一种语法糖,用于执行作为参数传递的函数。另一种语法是将其列为def call_block(&block),然后执行两次block.call
  • 在您的示例中没有任何意义,但考虑一个接受自定义排序算法的排序方法:[1,2,3].sort_by{ |i| -i } 将执行反向排序
  • 或采用自定义函数应用于每个元素的映射方法:[1,2,3].map{ |i| i + 10 } # => [11,12,13]
  • 在后台它做了类似的事情:[yield(1), yield(2), yield(3)]
猜你喜欢
  • 2018-01-10
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
相关资源
最近更新 更多