开发者社区> 问答> 正文

这段代码中逗号的功能是什么?

小六码奴 2019-04-10 16:08:21 288

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

更清楚的是,它的功能是什么?为什么有一个逗号分隔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)

分享到
取消 提交回答
全部回答(1)
  • 小六码奴
    2019-07-17 23:33:07

    在Ruby可以“解构”的阵列,并将其绑定到以下述方式多个变量a, b = [1, 2],其中,1将被绑定到a和2到b。举个例子:

    [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)
    反思你的问题units[name, seconds=seconds....]不是有效的Ruby。Hash的[]方法只需要一个参数。您可以定义自己的类,接受更多。

    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实现,执行您所描述的内容,但默认情况下不会。

    0 0
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章