加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:38:53 所属栏目:百科 来源:网络整理
导读:当我们在以下代码中为name定义getter和setter方法时: class Animal attr_accessor :name def initialize(name) @name = name endend 内部发生了什么? Ruby如何获取符号并将其与变量匹配? 解决方法 它使用 instance_variable_get 和 instance_variable_set
当我们在以下代码中为name定义getter和setter方法时:

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

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

解决方法

它使用 instance_variable_getinstance_variable_set.

更新:正如安德鲁马歇尔所指出的那样,并非如此大多数ruby核心方法都是用C定义的,但结果基本相同.

可以如下定义attr_accessor和朋友:

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?”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读