gpt4 book ai didi

Ruby 元编程问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:01:48 25 4
gpt4 key购买 nike

当我调用 self.class.instance_variable_set("@var", ...)从类方法内部,该变量实际存储在哪里?是在类里面吗?在那个类的实例上?我似乎无法通过以下任何方式找到它:

e = Example.new
e.instance_variables
e.class.class_variables

我什至尝试使用 (class << self; self; end)技巧,但我找不到任何东西(http://ruby-metaprogramming.rubylearning.com/html/seeingMetaclassesClearly.html)。

这是代码片段(可以按我的需要工作)但我不确定为什么它可以工作:)

module HandyModule
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def use_template(template_name)
self.class.instance_variable_set("@_template", template_name)
end
def build(attributes = {})
template_name = self.class.instance_variable_get("@_template")
# do stuff with the template
end
end
end

class Example
include HandyModule
use_template :contact_form
end

基本上我可以包含这个方便的模块,然后我有一个名为 use_template 的类方法我可以用它指定我的构建方法要使用的模板。

最佳答案

当您在类定义中调用 use_template 时,self 是类 Example。当你调用self.class时,它是Example.class,或者Class。您将实例变量定义为类的类。

class Class
p @_template
end
# prints :contact_form

您可能应该只使用 self 而不是 self.class

关于Ruby 元编程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5931067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com