1

新しいメソッドを追加したり、特定の Classのメソッドを削除するにはどうすればよいですか? または、既に存在するメソッドを追加しようとすると、それがオーバーライドされます (ただし、この場合、古いメソッドを削除して、同じ新しいメソッドを追加できます)?

メソッド自体が文字列として表されている場合に実行できますか? (外部ファイルなどを使用せずに行うことを意味しますが、メソッドを文字列として記述するだけです)。

たとえば、クラス、シンボル、およびメソッドのコードである文字列を取得し、このメソッドを aClass に追加し、存在する場合は古いメソッドをオーバーライドするメソッド:

in: aClass add: aSymbol sourceCode: aString

と使用例:

in: ClassA add: #something sourceCode: 'self subclassResponsibility'
4

1 に答える 1

6

とても簡単です。Behavior クラスのカテゴリ「コンパイル」を確認してください。次のようなことができます。

 MyClass compile: 'something
   ^ self subclassResponsability'.

メソッドを配置するカテゴリ、通知先、エラー ブロックなどを指定できる「コンパイル」カテゴリの残りのメソッドを確認します。存在するメソッドで #compile: を呼び出すと、上書きします。

削除する場合も同様に、Behavior または ClassDescription に実装されている #removeSelector: などのメソッドを確認します。できるよ:

 MyClass removeSelector: something.

乾杯

于 2011-05-01T18:13:27.257 に答える