对不起这个愚蠢的问题我是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
答案 0 :(得分:2)
将while line = path.gets
替换为while line = file.gets
答案 1 :(得分:2)
你这么说:
path.gets
和path
是String
。有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,因为他们是对的,他们先进入。