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