我是Ruby的新手,现在正试图了解元编程的一些内容。 我想返回错过的方法名称:
class Numeric
attr_accessor :method_name
def method_missing(method_id)
method_name = method_id.to_s
self
end
def name
method_name
end
end
10.new_method.name #this should return new_method, but returns nil
答案 0 :(得分:3)
在method_missing
内,method_name
被解释为局部变量,而不是您期望的method_missing=
mutator方法。如果您明确添加接收器,那么您将得到您想要的:
def method_missing(method_id)
self.method_name = method_id.to_s
self
end
或者,您可以分配给@method_name
实例变量:
def method_missing(method_id)
@method_name = method_id.to_s
self
end
attr_accessor
宏只为您添加了两种方法,因此attr_accessor :p
是此简写:
def p
@p
end
def p=(v)
@p = v
end
您可以根据需要随意使用基础实例变量。