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 が何であるかを認識していないことを意味します。これを回避する1つの方法は、新しいインスタンスを作成することです(これは、クラスが行う方法を知っているためです):

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