2012-10-14 197 views
1

我很困惑如何调用在同一个类中定义的另一个函数内的类中定义的函数。这是我做了什么:在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:in StatFun': undefined method TestFunc' for Test:Class (NoMet hodError) from LawtonTest.rb:14:in `'

我无法弄清楚。任何帮助将不胜感激。

+0

我已经写了一篇Ruby的介绍,可能会帮助你:http://www.apeth.com/rubyIntro/justenoughruby.html – matt

回答

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方法。

+0

谢谢。我会给教程一看。我没有OOP背景,所以到目前为止,ruby对我来说是非常陌生的。 – conlaw

+0

@conlaw:如果你来自C或其他程序语言,OOP非常困难。只需阅读教程并搜索其他人。 – Linuxios

0

我无法在任何地方看到TestFunc的定义。你有没有定义它?

此外,红宝石一般的惯例是使用方法小写名称(如test_func


编辑回答前,应认真阅读问题...

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

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