12

これを強制できるかどうか知りたい

class A
  def bomb ; "bomb" ; end
end

class B ; end

bomb = A.instance_method(:bomb)

b = B.new
bomb.bind(b)

現在、エラー TypeError: bind argument must be an instance of A をスローします

これらのバインドされていないメソッドでできることに関して、これは非常に制限的であることがわかりました。可能性は少し制限されています。このような場合 (冪等関数だけに言及しているわけではありません)、それは理にかなっていますよね? そして、Bで複製されないAからの変数を処理する場合、実行エラーで十分でした。このバインドを強制する方法を本当に知りたいです。

4

2 に答える 2

2

クラスのインスタンスを別のクラスのメソッドにバインドすることはできません。インスタンスがこのクラスまたはそのサブクラスのオブジェクトでない限り。

これも明らかです。あるクラスの詳細を他のクラスのインスタンスに転送することはできません。その情報を運ぶことが許可されているインスタンス、つまりそのクラスまたはそのサブクラスのインスタンスとのみバインドできます。

したがって、Ruby も特定のクラスのメソッドを別のクラスのインスタンスにバインドしないことでカプセル化を維持します。

于 2012-11-05T19:05:46.307 に答える