Ruby中面向对象的实用设计中的Sandi Metz在第47页有一个例子:

class Gear
    attr_reader :chainring, :cog, :wheel
    def initialize(args)
        @chainring = args[:chainring]
        @cog       = args[:cog]
        @wheel     = args[:wheel]
    end
    ...
end

在Ruby 2.1+中,它可以表示为:
class Gear
    attr_reader :chainring, :cog, :wheel
    def initialize(chainring:, cog:, wheel:)
        @chainring = chainring
        @cog       = cog
        @wheel     = wheel
    end
    ...
end

这两个是相等的吗他们的工作方式似乎是一样的。

最佳答案

在第一个方法中,args散列中的任何额外键都将被忽略,如果指定的三个键中的任何一个缺少相应的变量,则将被赋给nil在第二个方法中,任何附加的或丢失的参数都将产生一个ArgumentError异常。

关于ruby - Ruby 2.1+关键字参数初始化程序语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31017706/

10-10 21:39