gpt4 book ai didi

Ruby 的 attr_accessor 魔术方法定义

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:39 25 4
gpt4 key购买 nike

为了更好地理解 Ruby,我决定重新创建 attr_accessor 方法。成功了。除了有关 Ruby 语法糖的一个细节外,我现在了解它是如何工作的。这是我创建的 attr_accessor 方法:

def attr_accessor(*attributes)
attributes.each do |a|
# Create a setter method (obj.name=)
setter = Proc.new do |val|
instance_variable_set("@#{a}", val)
end

# Create a getter method (obj.name)
getter = Proc.new do
instance_variable_get("@#{a}")
end

self.class.send(:define_method, "#{a}=", setter)
self.class.send(:define_method, "#{a}", getter)
end
end

在我看来,我只是定义了两个方法,obj.name 作为 getter 和 obj.name= 作为 setter。但是当我在 IRB 中执行代码并调用 obj.name = "A string" 它仍然有效,即使我定义的方法没有空格!

我知道这只是定义 Ruby 的魔法的一部分,但究竟是什么让它起作用?

最佳答案

当 ruby​​ 解释器看到 obj.name = "A string 时,它会忽略 name= 之间的空格并寻找一个obj 上名为 name= 的方法。

关于Ruby 的 attr_accessor 魔术方法定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14876635/

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