实例化默认值和变量
Posted
技术标签:
【中文标题】实例化默认值和变量【英文标题】:Instantiating defaults and variables 【发布时间】:2014-11-12 03:06:45 【问题描述】:所以我有一个班级 Ball。在 Ball 中,我们有一个方法类型。我想要做的是返回一个球类型的字符串。棘手的部分:如果球没有参数,我想返回字符串“标准”。这可以很好地处理无参数情况。但是,“足球”案例不断抛出 ArgumentError 1 for 0 错误。如果没有传递给类型的参数并打印给定的参数(假设它是一个字符串),我想要做的是设置一个默认的“标准”。如何修复 ArgumentError?我已经尝试使用 splat 并且已经使用了 0 个参数。都没有用
class Ball
def type(ball="standard")
ball
end
end
Test.assert_equals Ball.new("football").ball_type, "football"
Test.assert_equals Ball.new.ball_type, "standard"
【问题讨论】:
【参考方案1】:由于您在Ball
上调用new
,因此您应该将type
方法重命名为initialize
。当构造Ball
的新实例时,将自动调用此方法。
class Ball
def initialize(ball = "standard")
@ball = ball
end
end
@ball = ball
表示ball
参数保存到@ball
实例变量中。
当您调用Ball.new.ball_type
时,您似乎还想要一个访问球类型的方法:
class Ball
def initialize ... end
def ball_type
@ball
end
end
此方法仅返回 @ball
实例变量的值,该变量在 initialize
方法中设置。
经过这些修改:
Ball.new("football").ball_type # => "football"
Ball.new.ball_type # => "standard"
【讨论】:
这样就成功了,但是有什么办法可以折射它吗?有 2 种方法来处理 null 案例只是感觉..对我来说效率低下 @user3466773 这很简单。如果您不介意将ball_type
方法重命名为 ball
,则可以将 def ball_type ... end
重构为 attr_accessor :ball
。以上是关于实例化默认值和变量的主要内容,如果未能解决你的问题,请参考以下文章