1

我很困惑如何在同一个类中定义的另一个函数中调用一个类中定义的函数。这是我所做的:

class Test
  def TestFunc(obj)
    puts obj
  end

  def Test.StatFun(obj)
    puts obj
    TestFunc(obj)
  end   
end

Test.StatFun([[5,2], [4,3]])

当我在 中运行它时cmd.exe,我收到以下错误:

ruby LawtonTest.rb 5 2 4 3 LawtonTest.rb:10:in StatFun': undefined methodTestFunc' for Test:Class (NoMet hodError) from LawtonTest.rb:14:in `'

我想不通。任何帮助将不胜感激。

4

2 回答 2

1

您必须在对象上调用它。我认为您需要很好地参考 Ruby 中的 oop,请查看http://zetcode.com/lang/rubytutorial/oop/。但无论如何,事情是,方法(这是你用 声明的def)必须在一个对象上调用,而不是像一个全局函数。所以如果你想使用TestFunc,试试这个:

def Test.StatFun(obj)
  puts obj
  Test.new.TestFunc(obj)
end

Test.new部分用于创建一个对象,您可以在该对象上使用该TestFunc方法。

于 2012-10-14T01:34:03.827 回答
0

我在任何地方都看不到 TestFunc 的定义。你定义了吗?

此外,一般的 Ruby 约定是为方法使用小写名称(例如test_func


编辑应该在回答之前真正阅读问题......

这里的问题是TestFunc 只为Test 类的实例定义,而当您调用Test.StatFun 时,执行代码的对象是实际的Test类。这意味着它不知道 TestFunc 是什么。解决这个问题的一种方法是创建一个新实例(因为这是类知道如何做的一件事):

def Test.StatFun(obj)
  puts obj
  new.TestFunc(obj)
end
于 2012-10-14T01:29:32.690 回答