Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 每种方法是如何工作的?_Ruby - Fatal编程技术网

Ruby 每种方法是如何工作的?

Ruby 每种方法是如何工作的?,ruby,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.t

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

我有一门很基础的课

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
实例,那么
每个
方法如何找到内部的数组?

因为在执行行
configs=configs.new('config.txt','config1.txt')
时,您使用了创建数组的
*config\u文件。您的
Configs.new
称为actaully
Class#new
,它也称为您的
#initialize
方法,您在其中使用了飞溅参数。一个简单的演示

*a = 1,2,3
a # => [1, 2, 3]
更正的代码

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

您的代码无法按显示的方式工作:

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
configs
类的实例。(实际上,您应该将其称为
Config
,因为类更可能是某个事物的单个实例,而
Config
则是该类的单个实例。)

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


使用
configs.config_files
返回对
@config_files
的引用,因为它是一个数组,所以每个方法都有

您使用的是哪个版本的Ruby?Ruby 1.9.3上孤立的这个代码片段不起作用。你复制/粘贴错误了吗?当我运行您的示例时,我发现实际上,我使用Rubymine的IRB控制台犯了一个错误。在重新加载之后,每个方法仍然有效,因为我以前实现了自己的方法,只是随便修改一下,我删除了它,它仍然有效。我不确定这是怎么可能的,所以我提出了这个问题。在看到所有的回复后,我完全停止了这个过程,每个方法都消失了。感谢所有周到及时的回复,爱这个社区。这不是问题。他在问为什么
配置
每种
方法。
configs.config_files.each { |c| puts c }
# >> config.txt
# >> config1.txt