gpt4 book ai didi

ruby - 乘号:* do?是什么意思

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:21 24 4
gpt4 key购买 nike

特别是,使用注入(inject),以下脚本,

  • puts (1..5).inject {|x, y| x * y}
  • puts (1..5).inject(:*),

如我所料,两者都有输出 120

但是,脚本

print [[1,2], [3,4], [5,6]].map {|x, y| x * y}

有输出

[2, 12, 30]

正如预期的那样,但是脚本

print [[1,2], [3,4], [5,6]].map(:*)

引发ArgumentError:

confused_ruby_map_inject.rb:1:in `map': wrong number of arguments(1 for 0) (ArgumentError)
from confused_ruby_map_inject.rb:1:in `<main>'

为什么会这样,:* 做了什么,用第二组脚本实现我想要的结果的最简洁方法是什么?

最佳答案

inject() 可以接受一个 block 或一个符号,但 map() 总是接受一个 block 。我认为您的工作 map() 足够简洁。

:*是乘法的符号名。

更新:我认为您的工作 map() 很好,但看起来您可能正在寻找的是经典的 map/reduce,即使它实际上是更长:

[[1,2], [3,4], [5,6]].map{|a| a.reduce(:*)}

关于ruby - 乘号:* do?是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14990032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com