我有以下代码,我想知道是否有人可以帮助解释它是如何工作的。
我有一个非常基础的课程
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']
如果configs
是Configs
个实例,each
方法如何在内部找到数组?
答案 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
configs
是Configs
类的实例。 (实际上你应该把它称为Config
,因为一个类更可能只是一次出现,而config
作为该类的单个实例。)
configs
有一个实例变量@config_files
,它是一个数组。它有一个config_files
访问器,它返回该实例变量。
使用configs.config_files
会返回对@config_files
的引用,其中 具有each
方法,因为它是一个数组。