define_singleton_method
ブロック内のクラスメソッドにアクセスしようとしていますが、動作していないようです。Rubyのdefine_singleton_methodブロックのクラスメソッドにアクセスするには
ここは例です。
class Test
attr_accessor :tags
def initialize
@tags = []
@tags.define_singleton_method(:<<) do |val|
val = tosymbol(val)
push(val)
end
end
def tosymbol(value)
value = value.to_s
value = value.gsub!(/\s+/,'_') || value
value = value.downcase! || value
return value.to_sym
end
end
しかし、私はそれを使用するときにエラーが発生します。
test = Test.new
test.tags<<"Hello World"
NoMethodError: undefined method `tosymbol' for []:Array
from /home/joebloggs/GitHub/repo/file.rb:183:in `block in initialize'
from (irb):9
from /home/joebloggs/.rvm/rubies/ruby-2.3.0/bin/irb:11:in `<main>'
私はval = Test::tosymbol(val)
にval = tosymbol(val)
を変更しようとしたが、それはどちらか動作しませんでした、私はtosymbol
が何をしているかを再記述することもできますが、それは非常にDRYではないでしょうundefined method 'tosymbol' for Test:Class
を取得します。どこが間違っていますか?ありがとう。
デフself.tosymbol' '試してみてくださいは、その後、' 'テスト:: tosymbol(val)で呼び出します。実際に何をしようとしていますか?多分もっと良い方法を提案するかもしれません。 –
'def self.tosymbol'は残念なことに動作しませんでした。私がしたいことは、インスタンス変数にプッシュされたものに対して検証メソッドを実行することです。現時点では、インスタンスの<<メソッドをオーバーライドすることでこれを実行しようとしています。問題は、私が他の場所にあるコードを再利用したいということです。 'define_singleton_method'は、それ以外のものを見ることができないようです。 –