【发布时间】:2018-03-23 12:35:44
【问题描述】:
我目前正在使用 ruby 进行一些元编程,并且我正在尝试隔离类的方法(该类在另一个文件中,我通过要求获得)。感谢 klass.public_instance_methods(false),我可以获得所有方法,但同时,我给出的数组也具有类的所有属性。我怎么能隔离他们?在关于 SO 的其他相关问题中,他们建议使用 klass.instance_variables 但是当我这样做时,它只返回一个空数组。
我似乎无法理解那个人。我不明白为什么还没有专门针对那个的方法...
例如:
我在一个文件中有这个类:
class T
attr_reader:a
def initialize(a)
@a = a
end
def meth
#code here
end
end
而且,在另一个文件中,我有
require_relative 'T.rb'
class meta
def initialize
methods = T.public_instance_methods(false) #=> here methods = [:a,:meth] but I would want only to have [:meth]
#rest of code
end
end
【问题讨论】:
-
你能举个例子解释一下吗?
-
@VishalTajPM 我添加了一个例子
-
"给定的数组也具有类的所有属性" - 什么属性?访问者?
attr_accessor是一个简单的宏,它定义了两个实例方法。不多也不少。这些方法没有什么特别之处。
标签: ruby methods metaprogramming