gpt4 book ai didi

ruby - self.class_eval <
转载 作者:数据小太阳 更新时间:2023-10-29 08:21:47 29 4
gpt4 key购买 nike

我正在尝试理解这个函数。

我看到的是一个属性和类型被传递给了 opal () 方法。

然后type_name取值自 type只要typeSymbolString .否则,nametype 上调用方法.我想象 name方法类似于 class获取 type 类的方法争论。

self.class_eval 之后我有点迷路,但我猜这是在定义可能要添加到 self 引用的类中的代码块.

虽然我不确定这是如何工作的。

如果有人能解释 self.class_eval << DEF 之后发生了什么,我们将不胜感激.

    def opal(attr, type)
self.ds "#{attr}_id"
type_name = (type.is_a?(Symbol) || type.is_a?(String)) ? type : type.name
self.class_eval <<DEF
def #{attr}
if defined?(@#{attr})
@#{attr}
else
@#{attr} = if self.#{attr}_id
#{type_name}.get(self.#{attr}_id)
else
nil
end
end
end

def #{attr}=(value)
self.#{attr}_id = value.key
@#{attr} = value
end
DEF
end

最佳答案

<<DEF 之间的所有内容和 DEF只是一个字符串,#{ ... }让我们像处理其他字符串一样处理该字符串。

class_eval将导致解释器在模块上下文中的字符串上运行。

所以,如果你知道什么 attrtype然后您可以计算出正在运行哪些代码以向类中添加方法。

让我们说 attr"foo"type"Bazzle" .正在运行的代码将是:

def foo
if defined?(@foo)
@foo
else
@foo = if self.foo_id
Bazzle.get(self.foo_id)
else
nil
end
end
end

def foo=(value)
self.foo_id = value.key
@foo = value
end

关于ruby - self.class_eval <<DEF ... DEF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/973728/

29 4 0

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