Ruby on rails 私有方法`get';要求&引用;(命名者)

Ruby on rails 私有方法`get';要求&引用;(命名者),ruby-on-rails,ruby,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_fi

抱歉这个愚蠢的问题,我是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

替换
while line=path.gets
while line=file.gets
替换
while line=path.gets
while line=file.gets
您的意思是:

path.gets
路径
是一个
字符串
。有一个:

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

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

通过包含
内核
,因此上面提到的
获取
方法也是
字符串
的实例方法。但是,
Kernel#get
是私有的,所以
String#get
是私有的,这是您的错误:

private method `gets' called for "file.txt":String (NoMethodError)
您想调用
文件
上的
获取
,如别处所述

Kernel#gets
,就像许多(全部?)的
内核
方法一样,是存在的,因此您可以将
gets
视为一个简单的函数,用于快速“n”脏单行程序等。
Kernel#get
的单线性也是它对
$进行操作的原因


这个答案主要是背景信息,这样你就知道发生了什么。我建议接受,因为他们是对的,而且他们是第一个进去的。

你是说:

path.gets
路径
是一个
字符串
。有一个:

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

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

通过包含
内核
,因此上面提到的
获取
方法也是
字符串
的实例方法。但是,
Kernel#get
是私有的,所以
String#get
是私有的,这是您的错误:

private method `gets' called for "file.txt":String (NoMethodError)
您想调用
文件
上的
获取
,如别处所述

Kernel#gets
,就像许多(全部?)的
内核
方法一样,是存在的,因此您可以将
gets
视为一个简单的函数,用于快速“n”脏单行程序等。
Kernel#get
的单线性也是它对
$进行操作的原因



这个答案主要是背景信息,这样你就知道发生了什么。我建议接受,因为他们是对的,而且他们是第一个进去的。

这是正确的。如果你真的想对一个对象调用私有方法,将来,你可以使用
path.send:gets
(但你确实想要这里的文件-它是通过file.open命令传递给块的变量)。@Brad:但问题是,私有
字符串#gets
(实际上是)读取标准输入(或多或少)因此,它很少是您正在寻找的方法。对,我认为描述访问私有方法的一般使用模式可能是值得的,因为他/她是一个自我描述的新手。在这种情况下这样做肯定是一个糟糕的主意,正如您所指出的,大多数其他人(无论如何,使用该方法)同样如此。这是正确的。如果你真的想对一个对象调用私有方法,将来你可以使用
path.send:gets
(但你确实想要这里的文件-它是file.open命令传递给块的变量)。@Brad:但问题是,私有
字符串#gets
(实际上是)从标准输入中读取(或多或少),因此它很少是您正在寻找的方法。对,我认为描述访问私有方法的一般使用模式可能是值得的,因为他/她是一个自我描述的新手。在这种情况下这样做绝对是一个糟糕的主意,正如您所指出的,大多数其他人(无论如何,使用该方法)还有。写得很好。每次见到你,我都会学到一些新的和复杂的东西(我还在玩那个erb).只是出于好奇,你是如何对Rails的精髓了解这么多的?是否有一些先进概念的必备资源,或者主要来自工作/娱乐?@Brad:谢谢,我发现把所有东西都摆出来有助于我澄清自己的想法:如果我不能解释,那我就不知道了。通过回答,我学到了很多有趣的地方g问问题(通过教学学习)并在需要时首先深入源代码。我已经有一段时间了,我有广泛的背景,所以我的主要资源是经验。让我知道ERB的东西是如何进行的。写得很好。每次我看到你,我都会学到一些新的和复杂的东西(我仍然在玩那个ERB).只是出于好奇,你是如何对Rails的精髓了解这么多的?是否有一些先进概念的必备资源,或者主要来自工作/娱乐?@Brad:谢谢,我发现把所有东西都摆出来有助于我澄清自己的想法:如果我不能解释,那我就不知道了。通过回答,我学到了很多有趣的地方g SO问题(通过教学学习)当我需要的时候,我会先潜入源代码。我已经有一段时间了,我有广泛的背景,所以我的主要资源是经验。让我知道ERB的东西是怎么回事。-2,哎哟,作为一个新手,似乎是一个值得忽视的诚实错误…-2,哎哟,似乎是一个值得忽视的诚实错误,作为一个新手。。。