我在pry中定义了一个函数:to_s,但是我无法调用它.这种方法在哪里,我怎么称呼它?
pry(main)> def to_s
pry(main)* 'hello'
pry(main)* end
pry(main)> to_s
=> "main"
Run Code Online (Sandbox Code Playgroud)
我的ruby版本是2.1.2
当在irb或pry中定义一个方法时,它会转到 Object.instance_methods
[1] pry(main)> def to_s
[1] pry(main)* 'hello'
[1] pry(main)* end
=> :to_s
[2] pry(main)> def hello
[2] pry(main)* 'world'
[2] pry(main)* end
=> :hello
[4] pry(main)> Object.instance_methods(false)
=> [:pry, :__binding__, :to_s, :hello]
Run Code Online (Sandbox Code Playgroud)
可以在新对象中调用这些新方法.
[6] pry(main)> Object.new.to_s
=> "hello"
Run Code Online (Sandbox Code Playgroud)
我无法在顶层调用to_s的原因是这main是一个定义a #to_s和#inspect方法的特殊对象.
[5] pry(main)> singleton_class.instance_methods(false)
=> [:to_s, :inspect]
Run Code Online (Sandbox Code Playgroud)
您实际上处于顶级Object class#to_s方法,正如文档所述:
\n\n返回表示 obj 的字符串。默认 to_s 打印\n object\xe2\x80\x99s 类和对象 id 的编码。作为一种特殊情况,作为 Ruby 程序的初始执行上下文的顶级对象返回 \xe2\x80\x9cmain\xe2\x80\x9d。
\n
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |