如何在Ruby中的define_singleton_method块中访问类方法
我试图访问如何在Ruby中的define_singleton_method块中访问类方法,ruby,Ruby,我试图访问define\u singleton\u方法块中的类方法,但它似乎不起作用 这里有一个例子 class Test attr_accessor :tags def initialize @tags = [] @tags.define_singleton_method(:<<) do |val| val = tosymbol(val) push(val) end end def tosymbol(value)
define\u singleton\u方法
块中的类方法,但它似乎不起作用
这里有一个例子
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
类测试
属性存取器:标记
def初始化
@标签=[]
@标记。定义单例方法(:
我哪里做错了
您正在(re)定义一个
我哪里做错了
您正在(re)定义一个尝试def self.tosymbol
,然后调用Test::tosymbol(val)
。你到底想做什么?也许我们可以建议一个更好的方法。def self.tosymbol
不幸没有起作用。我想做的是对推送到实例变量的任何对象运行一个验证方法。目前我正试图通过重写实例Trydef self.tosymbol
,然后llTest::tosymbol(val)
。你到底想做什么?也许我们可以建议一个更好的方法。def self.tosymbol
很遗憾没有起作用。我想做的是对推送到实例变量的任何对象运行一个验证方法。目前我正试图通过重写实例来实现这一点对不起,但这对我来说不起作用@I_do_python抱歉,我编辑了答案,应该是test Ok,现在可以了,谢谢。不过,有没有办法让这个特定于一个实例变量呢?因为这可能意味着类中只能有一个数组实例变量。用户也不清楚您的附加到tags变量的是什么(也就是说,test@i\u-do\u-python的结果是肯定的,让我编辑答案,让你尝试一下。对不起,这对我不起作用。@i\u-do\u-python抱歉,我编辑了答案,应该是test-Ok,现在可以了,谢谢。不过,有没有办法让这个特定于一个实例变量呢?我想必会这样做。)在类中只能有一个数组实例变量。用户也不清楚您的附加到tags变量(即,test@i_do_python的结果)是否正确。当然,让我编辑答案,以确保您可以尝试工作
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>'
def initialize
@tags = []
end
def <<(val)
tags << tosymbol(val)
end
test = Test.new
test << "Hello World"
#=> [:hello_world]
def initialize
@tags = []
test = self # <============
@tags.define_singleton_method(:<<) do |val|
val = test.tosymbol(val)
push(val)
end
end
test.tags << 'Hello World'
#=> [:hello_world]