【发布时间】:2017-08-25 22:00:00
【问题描述】:
在《综合Ruby编程课程》电子书中我有一个子类方法扩展父类方法的案例。我不完全了解它是如何工作的:
class Parent
def initialize(foo:, bar:)
@foo = foo
@bar = bar
end
end
class Child < Parent
def initialize(buzz:,**args)
super(**args)
@buzz = buzz
end
end
我无法完全理解为什么我们在这里使用 splat - **args。
在这里def initialize(buzz:,**args) 我们只是告诉initialize 采用未知数量的键值参数,对吗?但这究竟意味着super(**args)。告诉方法从超类方法中获取那些键值参数?为什么不这样:
class Child < Parent
def initialize(buzz:)
super
@buzz = buzz
end
end
毕竟,super 告诉扩展方法与父级中的任何内容,那么为什么需要这些 splat args?
【问题讨论】:
-
您尝试您的解决方案了吗?你会得到一个错误,应该告诉你为什么需要 splat args。