Ruby 关于: 冒号的小问题

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

在models中

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

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

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

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

共收到 17 条回复

第一种是 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新手。。。。

#12楼 @sevk 是的,是的

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

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

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

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