这种方法如何运作?

时间:2013-10-16 17:26:02

标签: ruby

我有以下代码,我想知道是否有人可以帮助解释它是如何工作的。

我有一个非常基础的课程

class Configs
  attr_accessor :config_files

  def initialize(*config_files)
    @config_files = config_files
  end
end


configs = Configs.new('config.txt','config1.txt')

configs.each { |c| puts c }

config.txt
config1.txt
=> ['config.txt', 'config1.txt']

如果configsConfigs个实例,each方法如何在内部找到数组?

2 个答案:

答案 0 :(得分:1)

当执行第*config_files行时,请使用创建数组的configs = Configs.new('config.txt','config1.txt')。您的Configs.new名为actaully Class#new,也称为#initialize方法,您使用 splatted argument 。一个简单的演示

*a = 1,2,3
a # => [1, 2, 3]

Corrcted code

class Configs
  attr_accessor :config_files

  def initialize(*config_files)
    @config_files = config_files
  end
end


configs = Configs.new('config.txt','config1.txt')

configs.config_files.each {|c| puts c}

# >> config.txt
# >> config1.txt

答案 1 :(得分:1)

您的代码无法正常显示:

class Configs
  attr_accessor :config_files

  def initialize(*config_files)
    @config_files = config_files
  end
end

configs = Configs.new('config.txt','config1.txt')

configs.each { |c| puts c }
# ~> -:12:in `<main>': undefined method `each' for #<Configs:0x007f8a41899810> (NoMethodError)

您需要将其更改为:

configs.config_files.each { |c| puts c }
# >> config.txt
# >> config1.txt

configsConfigs类的实例。 (实际上你应该把它称为Config,因为一个类更可能只是一次出现,而config作为该类的单个实例。)

configs有一个实例变量@config_files,它是一个数组。它有一个config_files访问器,它返回该实例变量。

使用configs.config_files会返回对@config_files的引用,其中 具有each方法,因为它是一个数组。