9

クラスとモジュールでそれぞれ提供されているメソッドcattr_*とメソッドの違いは、ソースを調べてもわかりません。mattr_*私はこの質問を読みました:Railsモジュールのmattr_accessorとは何ですか?これは両方の方法についての詳細を提供しますが、違いを強調していません。

だから私の質問は、それらの違いは何ですか、そしてそれらがソースで実質的に同一であるのになぜ両方のメソッドのセットが必要なのですか?また、いつどちらを使うべきですか?

4

1 に答える 1

12

ModuleはクラスのスーパークラスであるClassため、適切な総称名を考えることができれば、アクセサーを定義するためのメソッドを適用できModule、モジュールとクラスで機能します。以下が機能することに注意してください。

class Bar
  mattr_accessor :test
end

しかし

module Foo
  cattr_accessor :test
end

動作しません。

クラス内で使用する必要のあるメソッドにcプレフィックスを付け、モジュール内で使用するメソッドにmプレフィックスを付けると、コードが少し明確になります。

于 2010-02-04T23:51:46.087 に答える