【问题标题】:Can someone help me understand this one line of code?有人可以帮我理解这一行代码吗?
【发布时间】:2019-09-18 04:56:37
【问题描述】:

我正在使用每个和产量做一个实验室

我几乎完成了实验并且有点理解它只是需要帮助完全掌握这一行。

产量(收藏[i])

def my_collect(array)
  i = 0
  collect = []
  while i < array.length
    collect << yield(array[i])
    i+=1
  end
  collect
end

【问题讨论】:

  • 请考虑以下几点:my_collect([1,2,3]) { |n| n*n } #=&gt; [1, 4, 9]my_collect([1,2,3]) { |n| (1.fdiv(n)).round(4) } #=&gt; [1.0, 0.5, 0.3333]yield(array[i]) yields 到块,传递参数array[i]。然后将块计算的结果返回并附加到数组collect

标签: ruby-on-rails ruby iterator


【解决方案1】:

yield 关键字(与块相关联)允许在方法调用期间传递一组附加指令。

此机制允许您根据需要自定义方法。

什么是块?

块是 Ruby 方法语法的一部分。 这意味着当一个块被 Ruby 解析器识别时,它将与被调用的方法相关联,并从字面上替换方法中的产量。

我还建议您将 while 循环替换为 .each

def my_collect(array)
  collect = []
  array.each { |a| collect << yield(a) }
  collect
end

my_collect([1, 2, 3]) { |n| n + 1 }  produces  ->  [2, 3, 4]

【讨论】:

  • 为什么不更进一步,使用maparray.map { |a| yield(a) } 足以满足该方法:)
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2016-04-28
  • 2015-12-06
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
相关资源
最近更新 更多