新手问题 请教一下这是什么语法啊

zkai · 2013年12月13日 · 最后由 sevk 回复于 2013年12月13日 · 2560 次阅读
if options.fetch(:validations, true)
         validates_confirmation_of :password, if: :should_confirm_password?
         validates_presence_of     :password, on: :create
         validates_presence_of     :password_confirmation, if: :should_confirm_password?

         before_create { raise "Password digest missing on new record" if password_digest.blank? }
       end

if: :should_confirm_password?是什么意思啊?有这种语法吗?

1.9 hash 语法,相当于 :if => :should_confirm_password?

跟 Ruby 2.0 以前 的这种写法是一样的

Before 2.0 :if => :password_required? After 2.0 if: :password_required?

但我觉得像 remote: true这种用新的写法简单明了 但像 :if => :should_confirm_password?这种,用老的方式写,更利于阅读.......

都一样的啊,,true 和:should_confirm_password? 没有本质区别吧,都是一个 ruby 支持的类型,后面哪个可以当成 symbol 看就好了

我知道那是 Hash,但是 if 不是保留字吗,我在 irb 里试了 a = {if:123},是错的。

#5 楼 @zkai 保留字在字符串或者符号中就不算保留字了。你的 irb 用的 1.8 版本的 ruby ?

#2 楼 @boyishwei 1.9 起就有了

@luikore 晕,我的 irb 是 0.9.6,我换一个试试。

a = {if: 123} 我这里也不行。估计只能用在函数的参数里面。

我的 ruby 版本是 1.9.2,在 irb 里不行,放到文件里,执行 ruby test.rb 是可以的。

#8 楼 @sevk #9 楼 @zkai irb 太老的关系?用 pry 在 1.9.2 是没问题的

哦,果然。。。irb 不如 pry . irb 怎么升级呢?

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