gpt4 book ai didi

ruby - Ruby 如何使用符号来引用变量名?

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:04 24 4
gpt4 key购买 nike

当我们在下面的代码中为 name 定义 getter 和 setter 方法时:

class Animal
attr_accessor :name
def initialize(name)
@name = name
end
end

内部发生了什么? Ruby 如何获取符号并将其与变量匹配?

最佳答案

它使用 instance_variable_getinstance_variable_set为此。

更新:正如 Andrew Marshall 指出的那样,不完全是。大多数 ruby​​ 核心方法都是用 C 语言定义的,但结果基本相同。

可以如下定义 attr_accessor 和 friends:

def self.attr_accessor(*names)
names.each do |name|
define_method(name) do
instance_variable_get("@#{name}")
end

define_method("#{name}=") do |new_value|
instance_variable_set("@#{name}", new_value)
end
end
end

请注意,我还使用了 define_method在这里定义访问器方法。

我建议你看一些关于 ruby​​ 元编程的介绍性文本,比如 "Don’t Know Metaprogramming In Ruby?" .

关于ruby - Ruby 如何使用符号来引用变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12761053/

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