検索で答えを見つける方法でこれを構成することはできないため、ここで集合意識を調査したいと考えています。Ruby 1.9 以降では、インスタンスで .methods を呼び出すと、そのインスタンスのクラスとは異なる結果が得られます。たとえば、"foo".methods には 'length' と 'size' が含まれますが、String.methods には含まれません。これの理由は何ですか?私はベテランのプログラマーですが、Ruby は初めてです。私の理解では、メソッドにはすべての祖先メソッドが含まれているはずなので、長さとサイズがインスタンスのリストに追加され、クラスのリストには追加されないのは、ミックスインまたはその他のパターンによるものですか?
質問する
217 次
2 に答える
2
長さとサイズは Stringインスタンスメソッドですが、なぜ String の (クラス) メソッドのリストに含まれるのでしょうか? クラスはオブジェクトであり、独自のメソッドを持っています。
つまり、呼び出しているオブジェクトでサポートされているメソッドのリストを取得します。String はクラスであるため、特定のクラス メソッドと、それが継承するクラス メソッドを取得します。
文字列インスタンスはインスタンスであるため、文字列のインスタンス メソッドと、それが継承するインスタンス メソッドを取得します。
于 2012-08-31T21:49:19.970 に答える
2
と混同.methods()
してい.instance_methods()
ます。
String
1つ目は、オブジェクトで呼び出すことができるメソッドを提供します。これはString
、オブジェクト自体としてのクラスです。String
2 つ目は、クラスを使用して作成されたオブジェクトのメソッド、または のインスタンスを提供しString
ます。
于 2012-08-31T21:52:26.427 に答える