`
lllyq
  • 浏览: 34686 次
  • 性别: 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")

相关推荐

    C# 中的try catch finall 的使用方法

    结合`try-catch-finally`,一个完整的异常处理结构可能如下所示: ```csharp try { // 可能抛出异常的代码 } catch (ExceptionType1 ex1) { // 处理ExceptionType1的代码 } catch (ExceptionType2 ex2) { // ...

    实现阶乘功能JAVA小程序

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

    Java实现多个wav文件合成一个的方法示例

    Java实现多个wav文件合成一个的方法示例 本文介绍了Java实现多个wav文件合成一个的方法,涉及java文件流读写、编码转换、解析等相关操作技巧。 知识点1:Java中的文件流读写 在Java中,文件流读写是通过使用`...

    关于java try()的括号中代码含义(实现Closeable接口)(csdn)————程序.pdf

    当一个类实现了`java.lang.AutoCloseable`接口(`Closeable`是其子接口),那么这个类的实例可以在`try`语句的括号内声明,Java编译器会自动在`try`块结束时调用`close()`方法,释放资源。这样可以避免忘记关闭资源...

    java中实现增删改sql数据库中的数据的通用(一个方法)方法

    本篇文章将详细探讨如何实现这样一个通用方法,以处理SQL数据库中的数据。 首先,我们需要引入JDBC(Java Database Connectivity)库,它是Java与数据库交互的标准API。在Java项目中,通常通过添加对应的数据库驱动...

    try-catch用法

    1. **第一个 `catch` 块** (`catch (DivideByZeroException e)`): 当尝试执行除法操作时,如果分母为零,则会触发这个异常。此时,程序将打印出异常的消息。 2. **第二个 `catch` 块** (`catch (FormatException e1)...

    Java try-with-resource语法使用解析

    其次,try-with-resource语法糖会在编译时生成一个隐含的finally块,在finally块中调用资源的close方法以关闭资源。 最后,try-with-resource语法糖可以自动关闭资源, 无需开发者手动编写关闭资源的代码。 try-...

    C#简单计算器(实现加减乘除)

    总之,通过以上代码,我们可以实现一个基本的C#简单计算器,它可以执行加减乘除混合运算。虽然原始版本不支持负数,但通过适当的修改,我们可以轻松地扩展其功能,使其更加强大。这个计算器的实现是一个很好的学习C#...

    try_code_

    【标题】"try_code_" 指的可能是一个包含了各种编程尝试或示例代码的压缩文件,这样的资源对于初学者和经验丰富的开发者来说都是宝贵的参考资料。这个标题暗示了这个压缩包可能包含各种语言的代码片段、实验项目或者...

    Python 实现try重新执行

    当`try`块中的代码抛出一个异常时,`except`块就会被执行,这样可以确保程序不会因为一个意外的错误而突然终止。在某些情况下,我们可能希望在发生异常时不仅捕获它,而且还要重新尝试执行出错的代码。下面我们将...

    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 ...

    Delphi异常处理try_except语句和try_finally语句用法以及区别.pdf

    2. **在程序中抛出一个异常** - 使用`raise`语句来抛出异常: ```delphi raise EMyException.Create('自定义异常消息'); ``` 3. **更精确地捕捉异常** - 在try...except...end结构中,可以通过指定异常类型来...

    Java AOP 公共异常处理,一个没有try的项目。.zip

    在"Java AOP 公共异常处理,一个没有try的项目"中,我们可以探讨如何利用AOP实现优雅的异常管理,避免在每个方法中都嵌套冗余的try-catch语句。 AOP的核心概念包括切面(Aspect)、连接点(Join Point)、通知...

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

    AutoCloseable 接口是 Java 中的一个接口,定义了 close() 方法,用于关闭资源。 ②、在 try() 代码中声明的资源被隐式声明为 final。这意味着,在 try 块中声明的资源不能被重新赋值。 ③、使用分号分隔,可以...

    利用golang实现封装trycatch异常处理实例代码

    这里我们将探讨如何利用一个名为`trycatch`的第三方包来实现这种异常处理机制。 首先,我们来看一下`trycatch`包的核心概念。它通过创建一个`TryCatch`结构体,该结构体包含一个错误通道`errChan`用于传递捕获到的...

    python try…finally…的实现方法

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

    用传参数的方法实现Java对SQLite的添加和查询

    本文将详细介绍如何通过传递参数的方法实现对SQLite数据库的添加和查询操作,避免直接拼接SQL语句,从而提高代码的安全性和可读性。 首先,确保你的项目已经引入了SQLite的JDBC驱动,如`sqlite-jdbc-3.27.2.1.jar`...

    JAVA实现计算立体图形体积、面积,通过接口类实现

    2. **继承与多态**:为了实现不同立体图形的计算,我们可以创建几个类,如`Cylinder`(圆柱体)、`Cone`(圆锥体)和`Cuboid`(长方体),这些类都继承自同一个抽象基类或实现`Shape3D`接口。通过这种方式,我们利用...

    登陆界面try

    "登陆界面try"这个标题可能指的是一个设计或实现登录界面的尝试,可能是为了优化用户体验或者增加安全性。下面,我们将深入探讨登录界面的相关知识点。 首先,登录界面的基本元素包括用户名输入框、密码输入框、...

    编写程序,该程序实现打开一个文本文件,每次读取一行内容,将每行作为一个字符串读入,并将字符串输出显示到屏幕上。

    下面我们将详细讲解如何编写一个Java程序,实现打开文本文件,逐行读取内容并将其作为字符串显示在屏幕上。 首先,我们需要引入Java的`java.io`包,因为这个包包含了处理输入输出的类,如`BufferedReader`和`...

Global site tag (gtag.js) - Google Analytics