大家好,我们知道 nil 的类型为 NilClass, 但是 puts.class 也是 NilClass, 这是为何? 为什么不想 JS, 有一个函数的类型,或者是 Object.
@lilijreey 这不是坑,语言设计不同而已。获得了方法调用不带括号的便利,也得在其他方面做点牺牲。你要的是这个:
puts_method = method(:puts) # => #<Method: Object(Kernel)#puts>
puts_method.('hello') # => 等同于 puts 'hello'
puts.class 的意思是说 先调用 puts() 它的结果再调用 class() puts 本身返回 nil ,所以你得到的结果是 nil. 其实 puts 方法定义于 Kernel include 进了 Object .默认你进入 irb 或随便运行了一个脚本。self 指向一个叫 main 的 Object 对象 ,所以你才有了 puts 方法 可能你的本意是 self.method(:puts).class 你想得到的是当前对象的 puts 方法的类。。这儿的返回 是 Method