私有方法`gets'调用“..”(NoMethodError)

时间:2012-11-09 07:48:00

标签: ruby-on-rails ruby

对不起这个愚蠢的问题我是ruby的新手。  以下代码中出现此错误的错误是什么:

private method `gets' called for "file.txt":String (NoMethodError)

以下是代码:

def read_file(path)
 File.open(path, 'r') do |file|
    while line = path.gets
     puts line
    end 
 end 
end

def initialize
  read_file("file.txt")
end

2 个答案:

答案 0 :(得分:2)

while line = path.gets替换为while line = file.gets

答案 1 :(得分:2)

你这么说:

path.gets

pathString。有gets method in Kernel

  

获取(sep = $ /)→字符串
  获取(限制)→字符串或零
  获取(sep,limit)→string或nil

     

返回(并分配给$_ARGV(或$*)中文件列表中的下一行,如果命令行中没有文件,则返回标准输入。

String通过Object包含Kernel,因此上面提到的gets方法也是String的实例方法。但是,Kernel#gets是私有的,因此String#gets是私有的,并且存在错误:

private method `gets' called for "file.txt":String (NoMethodError)

您希望在gets上致电file,如其他地方所述。

Kernel#gets和许多(所有?)Kernel方法一样,是这样的,你可以将gets视为一个简单的函数,用于快速的单行和类似。 Kernel#gets的单行性也是它为$_做事的原因。


这个答案主要是背景信息,以便您知道发生了什么。我建议接受Hck's answer,因为他们是对的,他们先进入。