实例化默认值和变量

时间:2014-11-12 03:06:46

标签: ruby class default argument-error

所以我有一个班级球。在Ball中我们有一个方法类型。我想要做的是返回一个类型的球。棘手的部分:如果球没有参数,我想返回字符串"标准"。这处理无争论的情况就好了。然而,"足球" case保持throw并且ArgumentError 1为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 个答案:

答案 0 :(得分:3)

由于您在new上呼叫Ball,因此您应该将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"