论坛首页 编程语言技术论坛

又一个try方法的实现

浏览 2655 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-24  
有几篇讨论try的元编程参考
http://www.iteye.com/topic/169001
http://www.iteye.com/topic/351546

这里也提供一个gem,可以以比较简洁的方式实现,如try.a.b.c即可

gem install trydefault

测试例子如下(需要写在rb文件里测试,irb里面不行)

require ’try_default/default‘
def xxx
    "yes"
  end
p try.xxx == 'yes'
p (try.xxx.default "no") == 'yes'
p try.xxx.yyy.zzz.nil? == true
#不过暂时还实现不了try.xxx.yyy.zzz || "no"的效果,尽管支持nil?
#p (try.xxx.yyy.zzz || "no") == 'no' will fails, because try.xxx.yyy.zzz is a proxy object
p (try.xxx.yyy.zzz.default "no") == 'no'

#try后面不是方法而是是变量则要改成
#for variable
@xxx = "yes"
p try(@xxx) == 'yes'
p (try(@xxx).default "no") == 'yes'
p try(@xxx).yyy.zzz.nil? == true
p (try(@xxx).yyy.zzz.default "no") == 'no'
p @xxx.try.yyy.zzz.nil? == true
p "#{try.xxx}" == 'yes'
p "#{try.xxx.yyy.zzz}" == ''

#对于有些场合需要确保xxx.yyy有值的,还可以这样
#That will throw undefined method error for makr sure yyy not nil
#p xxx.yyy.try.zzz
   发表时间:2009-03-25  
rails 2.3里面已经有了
Model.new.try("attr")
0 请登录后投票
   发表时间:2009-03-30  
不是流氓 写道
rails 2.3里面已经有了
Model.new.try("attr")

你没仔细看吧
0 请登录后投票
   发表时间:2009-03-30  
lllyq 写道
不是流氓 写道
rails 2.3里面已经有了
Model.new.try("attr")

你没仔细看吧

sorry
0 请登录后投票
   发表时间:2009-04-01  
这样的用法和

a.b.c rescue 0 或者 a.b.c rescue 'yes'

这样有明显的不同吗,感觉不出来啊,何必另外在加载一个gem?
0 请登录后投票
   发表时间:2009-04-01  
jack 写道
这样的用法和

a.b.c rescue 0 或者 a.b.c rescue 'yes'

这样有明显的不同吗,感觉不出来啊,何必另外在加载一个gem?


没什么明显不同,就是语意有点差别,非要说不同就是在erb里面可以写得少打几个字
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics