【问题标题】:What does a Ruby instance variable with a preceding colon mean (:@name)?前面带有冒号的 Ruby 实例变量是什么意思 (:@name)?
【发布时间】:2015-03-17 21:07:00
【问题描述】:

我正在研究 Ruby Koans 并遇到问题 #193:

  class Dog2
    def set_name(a_name)
      @name = a_name
    end
  end

  def test_instance_variables_can_be_set_by_assigning_to_them
    fido = Dog2.new
    assert_equal [], fido.instance_variables

    fido.set_name("Fido")
    assert_equal [___], fido.instance_variables
  end

答案是“assert_equal :@name, fido.instance_variables”。我知道冒号 (:) 表示一个符号,而 atsign (@) 表示一个实例变量。但是,我还没有找到关于组合冒号和 atsign 意味着什么的文档。

它是什么意思以及它是如何使用的?谢谢!

【问题讨论】:

    标签: ruby symbols instance-variables


    【解决方案1】:

    只是一个普通的符号:

    :@name
    #=> :@name
    :@name.class
    #=> Symbol
    

    根据Object#instance_variables的文档:

    instance_variables → 数组

    返回接收者的实例变量名称数组。笔记 简单地定义一个访问器不会创建相应的 实例变量。

    class Fred
      attr_accessor :a1
      def initialize
        @iv = 3
      end
    end
    Fred.new.instance_variables   #=> [:@iv]
    

    所以这里 Ruby Koans 说 fido.instance_variables 应该等于包含符号 :@name 的数组。

    assert_equal [:@name], fido.instance_variables
    

    【讨论】:

      猜你喜欢
      • 2017-03-25
      • 2016-11-14
      • 1970-01-01
      • 2018-12-12
      • 2012-10-09
      • 2011-01-17
      • 2012-09-25
      • 2010-11-16
      相关资源
      最近更新 更多