开发者社区> 问答> 正文

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

我试图用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)

展开
收起
小六码奴 2019-04-10 16:08:21 1912 0
1 条回答
写回答
取消 提交回答
  • 在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实现,执行您所描述的内容,但默认情况下不会。

    2019-07-17 23:33:07
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载