Kernel.pp在Ruby中引发NoMethodError

S.G*_*ami 2 ruby

我正在使用Ruby 2.6.3

Ruby ri将pp记录为:

以漂亮的形式打印参数。

无论如何,在文件中,当我编写并运行以下代码时:

#!/usr/bin/ruby -w

Kernel.pp 'hi'
pp 'hi'
Run Code Online (Sandbox Code Playgroud)

我收到NoMethodError。

但是以下代码如何工作?

#!/usr/bin/ruby -w

pp 'hi'
Kernel.pp 'hi'
Run Code Online (Sandbox Code Playgroud)

输出:

"hi"
"hi"
Run Code Online (Sandbox Code Playgroud)

这是截图

Hol*_*ust 5

实际pp方法是在Ruby附带的模块(也称为)中实现的pp。对于较旧的红宝石,要使用该方法,必须始终运行

require 'pp'
pp "foo"
Run Code Online (Sandbox Code Playgroud)

较新的红宝石附带一种便捷方法,Kernel#pp该方法自动需要pp模块并运行该方法。首次调用此方法(并因此调用require模块的)后,将前一个方法替换为实际使用的pp方法。

因此,如果您首先运行实例方法pp(在包含Kernel模块的Ruby中所有对象(即关于所有对象)上作为私有方法可用的私有方法),则pp模块将被加载,其他方法(包括Kernel.pp类方法)将变为可用。