0

抱歉这个愚蠢的问题我是红宝石新手。下面的代码有什么问题导致此错误:

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
4

2 回答 2

2

你这样说:

path.gets

并且path是一个String。有一个gets方法Kernel

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

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

String包括KernelviaObject所以gets上面提到的方法也是String. 但是,Kernel#gets是私人的,所以String#gets是私人的,你的错误是:

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

你想像其他地方所说getsfile那样打电话。

Kernel#gets,就像许多(所有?)Kernel方法一样,它是存在的,因此您可以将其视为gets快速'n'dirty one-liners 等的普通函数。的单行性Kernel#gets也是它做事的原因$_


这个答案主要是背景信息,以便您知道发生了什么。我建议接受Hck 的回答,因为他们是对的,而且他们是第一个加入的。

于 2012-11-09T08:29:57.433 回答
2

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

于 2012-11-09T07:49:53.043 回答