实例化默认值和变量

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

以上是关于实例化默认值和变量的主要内容,如果未能解决你的问题,请参考以下文章

EditText 默认值和变量名

关于类加载时静态成员变量的赋默认值和赋初始值问题

关于类加载时静态成员变量的赋默认值和赋初始值问题

Ansible 角色中的默认值和变量有什​​么区别?

初始化与清理

JS:默认函数参数值和范围