Ruby 关于: 冒号的小问题

moliliang · 2014年01月21日 · 最后由 ahtest 回复于 2016年05月06日 · 3604 次阅读

在 models 中

有这样的验证,然后我有小问题:

这样的写法
validates :username, presence: true, aliow_nil: false, uniqueness: true,
 这样的写法
validates :username, :presence => true, :aliow_nil=> false, :uniqueness=> true,

我有点糊涂,这样的代码效果是一样的,ruby 为毛要这么多中写法……

他们直接有什么区别呢。。

第一种是 Ruby 1.9 的新语法,跟第二种没啥区别

楼主的第一种是不是写错了,应该这么写吧

validates :username, presence: true, aliow_nil: false, uniqueness: true

第一种是 ruby1.9 加入的新的 Hash 写法,当 key 为 symbol 类型时,:key => 'value' 可以写成 key: 'value',所以二者是等价的。

谢谢各位。

symbol 永远都是 :symbol, 只有在 hash 中,1.9 有一个语法糖,可以将 :symbol => value 简化成 symbol: value

sytax sugar。作用一样

明显的 ruby 基础不过关。。。。

我还是坚持用下面这种,清晰易读

#8 楼 @pynix 不要打击人家,人家是边学 rails,边学 ruby 的,虽然我能分得清加冒号的情况,但是又可以不加冒号,这样灵活……

上面的是新语法,不过其实好多人都不太喜欢吧。觉得还是上面的看起来好看,最早就是看 Ruby 的代码比较好看,才开始学 Ruby 的哈哈

我也觉得写法太多,容易掉坑里。

#10 楼 @moliliang 其实我也是 ruby 新手。。。。

坚持下面这种 +1,这样代码中 symbol 的形式和 Hash 中键值对的形式都是统一的,代码可读性更强

当 key 为 symbol 时,可以使用第一种用法,否则,选择第二种用法。

#3 楼 @reyesyang 解决了我的困惑

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