【发布时间】:2014-09-12 02:07:03
【问题描述】:
module MyModule
class Parent
def initialize(a, b=nil)
begin
@my_var = b[:some_key]
rescue
@my_var = {}
end
end
end
end
module MyModule
class Child < Parent
def initialize(a, b=nil)
super a, b
begin
@my_var = b[:some_key]
rescue
@my_var = {:some_key => 'something more specific'}
end
end
end
end
我有两个类,我基本上使用 begin/rescue/end 将可选参数设置为实例变量。我知道我在这里对控制流使用异常处理,我只是不知道另一种方法!如何将@my_var 设置为自身(非零)或空哈希?
我试过了……
def initialize(a, b=nil)
b ||= {}
super
end
我想我的主要问题是我不明白可选参数和super 是如何工作的?我在模块中继承的事实有什么改变吗?
【问题讨论】:
-
我应该补充一点,我的意图是让
b基本上是一个选项哈希,通过它在父类中设置多个实例变量。 -
你试过
initialize(a, b={})吗? -
这绝对是一个'用你的手掌拍自己的额头'的时刻。谢谢,@UriAgassi!如果你回答而不是评论,我可以接受。
-
要解决您必须使用救援的问题,请尝试使用 fetch。 apidock.com/ruby/v1_9_3_392/Hash/fetch my_var = b.fetch(:some_key,{}) my_var = b.fetch(:some_key, {:some_key => 'something more specific'})
-
你考虑过
.nil?、.is_a? Hash、.has_key?()吗?
标签: ruby oop inheritance