ActiveSupport 是Rails中的无名英雄。那些大量让Rails代码更加漂亮和强大的功能在ActiveSupport中实现。它加了很多在Rails中普遍使用的方法到核心类中。如果你不介意花时间发觉它们,你会学习到各种方便的技巧,且能应用到你的程序中。
先看下下面这个习惯用法
def create_book
book = Book.new
book.title = "Trafalgar: The Nelson Touch"
book.author = "David Howarth"
@db.add(book)
book
end
你创建了一个对象,给对象设置属性,然后返回这个对象。ActiveSupport 中加入了一个可以让习惯用法美化(在某些情况下,简化)的新的方法(叫 returning)到Object中。
def create_book
returning Book.new do |book|
book.title = "Trafalgar: The Nelson Touch"
book.author = "David Howarth"
@db.add(book)
end
end
后者是没有短于前者,但内容更优雅。我感觉更“ Rubyish ” 。有些时候,它可以为您节省几行代码,如果这很重要的。 (只需浏览下Rails代码就能找到更多的例子。 )
Object#returing在Rails中已在相当长的一段时间,被检测是在2005年3月20号的第949修订 。 (它现在存在于active_support / core_ext /object/ misc.rb ,和原来的略有不同,不过还是很简短)
找这个方法的注释你会发现“A Ruby-ized realization of the K combinator, courtesy of Mikael Brockman.”
。。。。。。
。。。。。。
。。。。。。
这个实现非常简明扼要:
def returning(value)
yield(value)
value
end
分享到:
相关推荐
public Object getContent() { return content; // FindBugs警告就在这里 } } ``` 这里的`getContent()`方法直接返回了私有字段`content`的引用。如果外部代码捕获了这个引用并进行修改,例如: ```java ...
METHODS get_value RETURNING VALUE(rv_value) TYPE i. PRIVATE SECTION. DATA lv_value TYPE i. ENDCLASS. ``` **创建类的对象**: - 创建类的对象称为实例化,即基于类模板创建具体的对象。 - 使用`CREATE ...
- **May expose internal representation by returning reference to mutable object**:调用get方法,获得对象属性,获得的对象属性是一个可变的对象。 - **描述**:返回内部可变对象的引用,可能会导致外部实体...
标题 "returning-DOM-elements-javascript-源码.rar" 暗示了这是一个关于使用JavaScript操作和检索DOM元素的源代码集合。DOM(Document Object Model)是HTML和XML文档的结构化表示,允许通过编程方式访问和修改文档...
Sub procedures are used for performing tasks without returning a value. ##### 6. Function Procedures Function procedures return a value after executing. ##### 7. Standard Module A standard module is...
- **最终通知**(After Returning Advice):在连接点正常返回后执行。 下面是一个典型的AOP流程图示例: ```java try { // 前置通知 // 环绕通知 // 调用目标对象方法 // 环绕通知 // 后置通知 } catch ...
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System.out.println("后置通知:在目标方法 " + method.getName() + " 返回后调用"); } } ``...
在传统的面向对象编程 (Object-Oriented Programming, OOP) 中,业务逻辑往往与其他非核心逻辑(如日志记录、权限检查等)混合在一起,这导致了代码的重复和难以维护。 AOP 的核心思想是将这些横切关注点从业务逻辑...
##### 5.6 返回值(Returning Values) - 明确返回值的类型和意义。 ##### 5.7 条件运算符?前的表达式(Expressions before ‘?’ in the Conditional operator) - 条件运算符(`? :`)用于简单的条件判断。 - 示例: ...
public void logReturnValue(Object returnValue) { System.out.println("返回通知:方法 " + "返回了 " + returnValue); } ``` `returning`属性指定了返回值的参数名,可以在通知方法中使用。 ### 异常通知...
@AfterReturning(value = "execution(String freestyle.login.controller.ServiceTest.testAspect(..))", returning = "res") public void afterReturningMethod(JoinPoint joinPoint, Object res) { // 处理返回值...
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System.out.println("方法 " + method.getName() + " 执行成功,返回值为 " + returnValue); ...
- **RETURNING**:在 DML 语句之后返回结果集,便于链式操作。 通过这些更新,Firebird 2.1 成为了一个更为强大和灵活的关系型数据库管理系统,适用于各种规模的应用程序开发。对于想要深入了解 Firebird 2.1 的...
public void afterReturning(Object returnVal, Method method, Object[] args, Object target) throws Throwable { System.out.println("StudentAfterAdvice: " + method.getName() + " " + target.getClass()....
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { // 代码执行前操作 Object result = joinPoint.proceed(); // 执行目标方法 // 代码执行后操作 return result; } ``` ### 2.7 `@...
public void afterReturningAdvice(Object returnValue) { // 在这里,我们可以对returnValue进行操作 System.out.println("Method returned with value: " + returnValue); } ``` 这里的`returnValue`就是...
<property name="target" ref="targetObject"></property> <!-- 目标对象 --> <property name="proxyInterfaces" value="targetInterface"></property> <!-- 代理接口 --> ``` #### 四、高级配置 在实际开发过程...
@AfterReturning(pointcut = "serviceMethods()", returning = "result") public void afterServiceCall(Object result) { System.out.println("Service method finished successfully. Result: " + result); } ...
trace("Server returning Info: " + re.result); } function onState(e:Event):void { trace("State: " + e.target.data); } ``` 以上是基于Red5的录音录像功能实现的核心代码及逻辑说明。通过这些代码示例,...