在ruby中调用非静态函数

时间:2012-10-14 01:26:04

标签: ruby

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

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:在StatFun': undefined method TestFunc'for Test:Class(NoMet hodError)           来自LawtonTest.rb:14:在''

我无法理解。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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方法。

答案 1 :(得分:0)

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

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


在回答之前,

编辑应该真正阅读这个问题...

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

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