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/