Ruby错误 - 参数数量错误

时间:2011-10-25 22:15:47

标签: ruby

我正在学习来自java的ruby dev,我不明白为什么我会遇到错误。 @test是一个类变量,所以我应该能够输出它吗?

C:/Projects/RubyPlayground/Tester.rb:6:in `test': wrong number of arguments (ArgumentError)
    from C:/Projects/RubyPlayground/Tester.rb:6:in `testMethod'
    from C:/Projects/RubyPlayground/Tester.rb:10

源:

class Tester

  @test = "here"

  def testMethod()
    puts test
  end

  s = Tester.new()
  s.testMethod()

end

4 个答案:

答案 0 :(得分:5)

在这种情况下,@ test成为类实例变量,并与类对象(不是类实例!)相关联。如果你想@test的行为像java字段,你必须使用'initialize'方法:

class Tester
  def initialize
    @test = "here"
  end
  def testMethod
    puts @test
  end
end

s = Tester.new()
s.testMethod

答案 1 :(得分:3)

您正在呼叫Kernel#test

test(int_cmd, file1 [, file2] ) → obj

Uses the integer <i>aCmd</i> to perform various tests on <i>file1</i>
(first table below) or on <i>file1</i> and <i>file2</i> (second table).

我很惊讶这种方法存在。我在irb中使用self.method(:test)找到了它的定义,感谢问题How to find where a method is defined at runtime?

即使您有attr_reader :test @testTesterClass类对象(类s的对象)的实例变量,您的代码也无效而不是Tester实例对象的实例变量(类{{1}}的对象)。

答案 2 :(得分:0)

这是“puts @test”.................................

答案 3 :(得分:0)

在您的代码中,您调用的方法Kernel#test没有参数。但是Kernel#test需要参数,因此您会收到一个错误,告诉您没有提供足够的参数(即您根本没有提供参数)。

如果在ruby中没有定义方法测试,你会收到一条错误消息告诉你,你正试图调用一个未定义的方法,这可能不会让你感到困惑。

显然,您不打算调用名为test的方法 - 您想要访问实例变量@test。为此,您必须写puts @test而不是puts test。但是,由于您从未在新的@test实例上设置变量Test,因此仍无法执行您想要的操作。您只需为类设置一次@test变量。相反,您应该在@test的{​​{1}}方法中设置initialize