1

検索で答えを見つける方法でこれを構成することはできないため、ここで集合意識を調査したいと考えています。Ruby 1.9 以降では、インスタンスで .methods を呼び出すと、そのインスタンスのクラスとは異なる結果が得られます。たとえば、"foo".methods には 'length' と 'size' が含まれますが、String.methods には含まれません。これの理由は何ですか?私はベテランのプログラマーですが、Ruby は初めてです。私の理解では、メソッドにはすべての祖先メソッドが含まれているはずなので、長さとサイズがインスタンスのリストに追加され、クラスのリストには追加されないのは、ミックスインまたはその他のパタ​​ーンによるものですか?

4

2 に答える 2

2

長さとサイズは Stringインスタンスメソッドですが、なぜ String の (クラス) メソッドのリストに含まれるのでしょうか? クラスはオブジェクトであり、独自のメソッドを持っています。

つまり、呼び出しているオブジェクトでサポートされているメソッドのリストを取得します。String はクラスであるため、特定のクラス メソッドと、それが継承するクラス メソッドを取得します。

文字列インスタンスはインスタンスであるため、文字列のインスタンス メソッドと、それが継承するインスタンス メソッドを取得します。

于 2012-08-31T21:49:19.970 に答える
2

と混同.methods()してい.instance_methods()ます。

String1つ目は、オブジェクトで呼び出すことができるメソッドを提供します。これはString、オブジェクト自体としてのクラスです。String2 つ目は、クラスを使用して作成されたオブジェクトのメソッド、または のインスタンスを提供しStringます。

于 2012-08-31T21:52:26.427 に答える