我正在学习如何在模块中使用class_eval(我对class_eval有一定的了解),然后遇到了resource_controller中这个有用的类。在那里,他们有类似这样的东西:
class_eval <<-"end_eval", __FILE__, __LINE__
def #{block_accessor}(*args, &block)
unless args.empty? && block.nil?
args.push block if block_given?
@#{block_accessor} = [args].flatten
end
@#{block_accessor}
end
end_eval
__FILE__
和__LINE__
在这个上下文中是什么意思?我知道__FILE__
引用了当前文件,但这整个东西到底是干什么的呢?我不知道该如何搜索这个问题 :)
define_method
代替这种方法不需要这种技巧,而且也不会带来漏洞(参见https://dev59.com/JnA75IYBdhLWcg3w-OVA#3003509)。 - Marc-André Lafortune