`
lllyq
  • 浏览: 34137 次
  • 性别: Icon_minigender_1
  • 来自: Shanghai
社区版块
存档分类
最新评论

又一个try方法的实现

    博客分类:
  • ruby
阅读更多
有几篇讨论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
分享到:
评论
5 楼 lllyq 2009-04-01  
jack 写道
这样的用法和

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

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


没什么明显不同,就是语意有点差别,非要说不同就是在erb里面可以写得少打几个字
4 楼 jack 2009-04-01  
这样的用法和

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

这样有明显的不同吗,感觉不出来啊,何必另外在加载一个gem?
3 楼 不是流氓 2009-03-30  
lllyq 写道
不是流氓 写道
rails 2.3里面已经有了
Model.new.try("attr")

你没仔细看吧

sorry
2 楼 lllyq 2009-03-30  
不是流氓 写道
rails 2.3里面已经有了
Model.new.try("attr")

你没仔细看吧
1 楼 不是流氓 2009-03-25  
rails 2.3里面已经有了
Model.new.try("attr")

相关推荐

    实现阶乘功能JAVA小程序

    一个实现阶乘功能的JAVA小程序,代码较为简单。

    js-try:JS-Try是Rails中try方法的Javascript实现,用于安全导航

    JS-Try是Rails中try方法的Javascript实现,用于安全导航。 安装 纱线,NPM或凉亭 yarn add js - try npm install js - try bower install js - try 护栏/捆绑器 # Gemfile source 'https://rails-assets.org' do ...

    python try…finally…的实现方法

    假如上帝用 python 为每一个来到世界的生物编写程序,那么除去中间过程的种种复杂实现,最不可避免的就是要保证每个实例最后都要挂掉。代码可简写如下: try: born() # 出生 # 正常降临世界 # do something.. ...

    使用Java注解处理器实现一个简单的日志记录系统.txt

    这个代码实现了一个简单的日志记录系统。首先定义了一个Logger对象,用于记录日志信息。在main方法中,调用LOGGER的info方法输出程序开始和结束的日志信息。process方法用于处理日志文件,它使用了try-with-...

    Android Studio中快捷键实现try catch等功能包含代码块的实现方法

    主要介绍了 Android Studio中快捷键实现try catch等功能包含代码块的实现方法的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

    程序猿开发idea快捷键.docx

    作为程序猿,这里面涵盖了idea最常用以及最好用快捷键,开发者必备快捷键。...Ctrl+Alt+T 将代码包在一个块中,例如try/catch ;synchronized等 psvm 打印main函数 sout 打印 System.out.println()。。。

    tc-anywhere:可以在任何方法内添加try catch

    随时随地要解决的问题:有一些第三方包中存在一些崩溃问题,如果能try catch处理并不会影响程序运行,这...(目前只是实现了在方法无返回值的情况下添加try catch操作)使用 // project repositories { maven { url " ...

    Java使用 try-with-resources 实现自动关闭资源的方法

    主要介绍了Java使用 try-with-resources 实现自动关闭资源的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    Python 实现try重新执行

    Python try重新执行: def numberinput(): #创建方法 ...以上这篇Python 实现try重新执行就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文

    try:尝试成功失败Scala API for Java的实现

    为了使用Try您需要调用Try.apply(FailableSupplier)方法,该方法提供一个lambda,该lambda具有与常见java.util.function.Supplier相同的签名。 实际上, FailableSupplier只是一个java.util.function.Supplier ,在...

    redis-distribute-lock:Redis分布式锁的try-with-resources实现

    实现Redis分布式锁的最简单的方法就是在Redis中创建一个key,这个key有一个失效时间(TTL),以保证锁最终会被自动释放掉。当客户端释放资源(解锁)的时候,会删除掉这个key。 获取锁使用命令: SET resource_name my_...

    JAVA程序设计实验

    (1) 定义一个类,在main方法的try块中产生并抛出一个异常,在catch块中捕获异常,并输出相应信息,同时加入finally子句,输出信息,证明它的无条件执行。 (2) *定义一个类Caculate实现10以内的整数加减法的计算...

    JavaScript实现数字数组正序排列的方法

    JS数组的sort方法支持一个函数作为参数,下面的代码演示了JS数组如何实现数字的正序排列 <!DOCTYPE html> <html> <body> <p id=demo>Click the button to sort the array. <button onclick=...

    用贪心方法实现背包问题

    用贪心方法实现背包问题 【算法题目】:用贪心方法实现背包问题 【算法分析】: Try(物品I,当前选择已达到的重量和tw,本方案可能达到的总价值tv) {/*考虑物品i包含在当前方案中的可能性*/ If(包含物品i是可接受){ ...

    用JAVA实现复数的四则运算

    System.out.println("请输入第一个复数的实部:"); try{ s = in.readLine(); a=Double.parseDouble(s); } catch(IOException e) { System.out.println("抛掷异常");} System.out.println("请输入第一个复述...

    基于JAVA的聊天系统的设计与实现

    在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java语言...

    C++命令行参数的实现方法及使用方法,代码详细,执行正确。

    执行程序时,经常会用到命令行参数传递参数这种方式,今天实战一个命令行参数的从头到尾。 博文虽长,但均为干货。 先写个主函数 #include int main(const int argc, const char* argv[]) //argc和argv的类型不一样...

    方法抛出的异常处理 (2)修改UserDaoImp1类,要求用户id不能修改,修改则抛出异常 使用log4j输出日志信息

    1.需要完成的任务 使用UserDaoImp1类和User...(2)为了判断在finally块输出是否抛出异常,可以设置一个变量,在catch块里修改这个变量 实践四:使用log4j 需求说明 (1)使用log4j输出日志信息 (2)查看输出日志信息

    JavaScript实现将数组中所有元素连接成一个字符串的方法

    本文实例讲述了JavaScript实现将数组中所有元素连接成一个字符串的方法。分享给大家供大家参考。具体如下: 下面的代码演示了JS中如何通过数组对象的join方法将数组元素连接成一个字符串输出 <!DOCTYPE html> &...

Global site tag (gtag.js) - Google Analytics