gpt4 book ai didi

ruby - 这段代码中逗号的作用是什么?

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

我试图用 method.each_with_object 来理解这段代码。我不明白逗号(在 units[name] 之后)在 block 内是如何工作的。

更清楚一点,它的作用是什么?为什么有一个逗号将 units[name]seconds=... 分开,而不是写成 units[name, seconds=seconds.. ..]?

这是一段代码:

units = durations.each_with_object({}) do |(name, duration), units|
units[name], seconds = seconds.divmod(duration)
end.reject { |k, v| v.zero? }.map(&singularize)

最佳答案

在 Ruby 中,您可以“解构”一个数组并将其绑定(bind)到多个变量,方法如下 a, b = [1, 2],其中 1 将是绑定(bind)到 a2b。举个例子:

[1] pry(main)> a, b = [1, 2]
=> [1, 2]
[2] pry(main)> a
=> 1
[3] pry(main)> b
=> 2

知道这一点上面的代码是一样的

units = durations.each_with_object({}) do |(name, duration), units|
result = seconds.divmod(duration)
units[name] = result.first
seconds = result.last
result
end.reject { |k, v| v.zero? }.map(&singularize)

反射(reflection)您的问题 units[name, seconds=seconds....] 不是有效的 Ruby。哈希的 [] 方法只需要一个参数。您可以定义自己的类来接受更多内容。

# The following was tested on ruby 2.6

class A
def [](name, surname)
puts "#{name} #{surname}"
end

def []=(name, surname, value)
puts "#{name} #{surname} = #{value}"
end
end

a = A.new
a['foo', 'bar'] # prints 'foo bar'
a['foo', 'bar'] = 'baz' # prints 'foo bar = bar'

因此您可以定义自己的 Hash 实现来执行您描述的操作,但默认情况下它不会。

关于ruby - 这段代码中逗号的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55561826/

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