0

授業でcattr_accessor使いたいactive_support/core_ext/class/attribute_accessorsrefinement

  require 'active_support/core_ext/class/attribute_accessors'

  module ExtendedString
    refine String do
      cattr_accessor :separator
    end
  end

しかし、エラーが発生しました:

 block in <module:ExtendedString>': undefined method `cattr_accessor' for #<refinement:String@Truncator::ExtendedString> (NoMethodError)

cattr_accessorクラスの絞り込みでどのように使用できますか?

4

1 に答える 1

0

コメントとして投稿しますが(解決策を提供しないため)、フォーマットが必要です。

失敗する理由に答えるには:

Ruby docが改良について述べている間、 ActiveSupportはコアオブジェクトにサルパッチを適用core_ext.rbすることを容易にします:cattr_accessorClass

...洗練ブロックの自己は、Module#module_evalに似たこの匿名モジュールです。

したがって、明らかにcattr_accessibleリファインメント内からはアクセスできません。

そして、そうであったとしても、cattr_accessible(正確にcattr_writerは)とにかくグローバルスコープに影響を与えるcattr_readerメソッドを使用しているため、改良の目的が無効になります。class_eval

于 2013-11-03T20:28:51.927 に答える