Ruby Ruby 将引入 ".?" Safe navigation operator

jun1st · 2015年10月23日 · 最后由 deathking 回复于 2015年10月24日 · 1979 次阅读

Matz 已经同意了引入 ".?" 作为 Safe navigation operator

u = User.find(id)
if u && u.profile && u.profile.thumbnails && u.profiles.thumbnails.large

将可以简化为:

u.?profile.?thumbnails.?large

省了好多敲击 LOL

https://bugs.ruby-lang.org/issues/11537?utm_source=rubyweekly&utm_medium=email

共收到 16 条回复

但需要习惯 :sad:

繼續用 NullObject

我喜欢这种语法

思想挺好,但是感觉写起来很多问号会不好看。

习惯了这个

[:profile, :thumbnails, :large].reduce(u, :try)

#5楼 @gihnius 可读性没有问题?

Swift 和 CoffeeScript 用的就很爽,现在终于轮到 Ruby 了~~~

#6楼 @nong 封装到一个方法里

Ugly symbol, Ruby 里的语法糖真多

不好看,我觉得try已经可以了

#10楼 @chaucerling try 是 active_support 的实现,不是 Ruby 语言层面的实现。

这个场景太频繁,语言级别支持就简洁多了。

#9楼 @michael 你会习惯的:)

速度比 try 快很多哈

这个我总觉得在哪里见过,好象是学 swift 的时候..

实现为 operator 是不是意味着它又是一个 method 的语法糖?我们可以覆盖它?YAVM 虚拟机上有对应的原语级操作么?

#2楼 @juanito 赞同 NullObject 。但是 NullObject 只是转移了 overhead ,并没有消除它。当我们有大量的 NullObject 的时候,又如何方便地管理呢?是用 https://github.com/avdi/naught 这种 builder 么?

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