'attr_reader'是否在整个班级中提供了一个局部变量?

时间:2018-02-23 09:41:31

标签: ruby attr-accessor

为什么Sub openxXML() Dim xml As Workbook Dim varxml As Variant varxml = Application.GetOpenFilename("Alle Data (*.*), *.*,XML-Data(*.xml),*xml*", 2, "Choose XML-File", _ "choose", False) If varxml = False Then MsgBox "No Data selected" End If End Sub 方法中的type变量可用于以下内容?

is_a_peacock?

为什么评论class Animal attr_reader :type def initialize(type) @type = type end def is_a_peacock? if type == "peacock" return true else return false end end end an = Animal.new('peacock') puts an.is_a_peacock? # => true 的初始化会使@type无效?

type

3 个答案:

答案 0 :(得分:1)

你可以认为attr_reader :type正在为你做这件事:

def type
  @type
end

但它不会根据你传入初始化程序的内容自动分配实例变量,就像你似乎认为的那样。

由于您不再@type = type@type保持默认值nil。默认情况下,每个实例变量都为nil。

在旁注,而不是

   if type == "peacock"
        return true
    else
        return false
    end

你可以写

   type == "peacock"

答案 1 :(得分:1)

  

"为什么评论@type的初始化使type无效?"

没有。方法type可用。只是没有初始化。因为你评论了这一点。

如果方法type不可用,您的程序将崩溃。 (正如您在注释attr_reader时那样)。

答案 2 :(得分:1)

  

为什么type方法中的is_a_peacock?变量可用于以下内容?

你对这个问题的预设并不成立。 type方法体内的is_a_peacock?不是局部变量。这是一个方法调用。

  

为什么评论@type的初始化会使type无效?

没有。方法type可用,返回@type的值,默认为nil