Ruby Ruby 中方法的类型为何是 NilClass?

lilijreey · 2016年09月05日 · 最后由 blackant2 回复于 2016年09月20日 · 2990 次阅读

大家好,我们知道 nil 的类型为 NilClass, 但是 puts.class 也是 NilClass, 这是为何? 为什么不想 JS, 有一个函数的类型,或者是 Object.

puts 是个方法,返回 nil,你调用的是 nil.class

你可以试试

eval.class 

#1 楼 @Rei #2 楼 @sevk 我也是醉了 ruby 这样设计个人觉得是个坑 ,没想到😂,那么怎么对 ruby 的方法本身,进行处理。

什么叫进行处理?处理什么?

@lilijreey 这不是坑,语言设计不同而已。获得了方法调用不带括号的便利,也得在其他方面做点牺牲。你要的是这个:

puts_method = method(:puts)  # => #<Method: Object(Kernel)#puts>
puts_method.('hello')  # => 等同于 puts 'hello'

可以这样:

a= 'puts'
send a, 1

可以看看 send 说明

8 楼 已删除

ruby 不是 callable 语言,在这点上是和 js python 什么的完全不同的 例如居里化比较麻烦,但是 OO 本来就不提倡把函数拿出来

我充分理解楼主,我之前也是主要写 JS。 你就记住一句话,a.b 是在调用方法,而不是读属性…… 我在这一点上错过很多次……

Ruby 里面一切都是对象这句话多么美好啊。虽然我到现在还是单身。

puts.class 的意思是说 先调用 puts() 它的结果再调用 class() puts 本身返回 nil ,所以你得到的结果是 nil. 其实 puts 方法定义于 Kernel include 进了 Object .默认你进入 irb 或随便运行了一个脚本。self 指向一个叫 main 的 Object 对象 ,所以你才有了 puts 方法 可能你的本意是 self.method(:puts).class 你想得到的是当前对象的 puts 方法的类。。这儿的返回 是 Method

需要 登录 后方可回复, 如果你还没有账号请 注册新账号