我们经常需要将一个代码块传递给迭代器,并在代码块中调用另一个方法。Rails提供了一条实现这一功能的捷径,于是下面两句代码等价:
groups = posts.group_by { |post| post.author_id }
groups = posts.group_by(&:author_id)
让我们看下这一切是如何工作的:
class Symbol
# Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:
#
# # The same as people.collect { |p| p.name }
# people.collect(&:name)
#
# # The same as people.select { |p| p.manager? }.collect { |p| p.salary }
# people.select(&:manager?).collect(&:salary)
def to_proc
Proc.new { |*args| args.shift.__send__(self, *args) }
end
end
&符号用在symbol前面实际上是调用了to_proc方法,而to_proc里返回一个Proc对象,内部为调用symbol指定的方法。举例如下:
projects = Project.find(:all)
projects.collect { |p| p.name }
# => ["Rails Projects", "Housework"]
projects.collect(&:name)
# => ["Rails Projects", "Housework"]
projects.collect(&:name).collect(&:downcase)
# => ["rails projects", "housework"]
projects.all?(&:valid?)
# => true
projects.any?(&:valid?)
# => true
分享到:
相关推荐
#ifndef __KERNEL__ #define __KERNEL__ #endif #ifndef MODULE #define MODULE #endif #define __NO__VERSION__ ...//MODULE_PARM(var,type)模块参量的类型代码: b=byte h=short i=int l=long s=string
在Linux某种特殊情况下 ping命令报错cat_set_proc 该文档源码层级分析核心原因 帮忙学习Linux权限、用户等
#define CONFIG_ONLY_ONE_OUT_EP_TO_LOW 0 #define CONFIG_OUT_EP_WIFI_MODE 0 #define ENABLE_USB_DROP_INCORRECT_OUT 0 #define RTL8192CU_ASIC_VERIFICATION 0 // For ASIC verification. #define RTL8192CU_...
kernel_module_list_first_proc _level
用Linux环境下C/C++语言实现的Oracle的原生Proc接口,供参考。
create device file using proc file system
Unix下Oracle数据库开发必备资料
matlab导入excel代码utl_special_case_of_column_percentages_wps_proc_r 列百分比wps proc r的特例。 关键字:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI ...
multi_proc_wrong.c 下载后直接编译运行
SET QUOTED_IDENTIFIER ON GOSET ANSI_NULLS ON GOALTER proc sp_nrc_pattern_body /*this procedure is for the report ID:NRC002 Other procedure sp_uploadpicwithpath: upload the pictures to database */ AS...
matlab导入excel代码utl_programatically_execute_excel_macro_using_wps_proc_python 使用wps proc python以编程方式执行excel宏。 关键字:sas sql join合并大数据分析宏oracle teradata mysql sas社区...
linux 下编程获取系统的cpu使用情况,主要读取proc文件下的stat文件
matlab代码输入如何换行符utl_sort_transpose_and_summarize_in_one_proc_v2 在一个过程中对转置和汇总进行排序。 关键字:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工...
Oracle 11g ProC_C++编程艺术 源代码
# # we will start as root and wpa_supplicant will switch to user wifi # # after setting up the capabilities required for WEXT # # user wifi # # group wifi inet keystore # class main # socket wpa_wlan0...
[原代码收集] 隐藏文件和进程的驱动代码
使用方法: /sbin/set_irq_affinity eth1 可以进行中断绑定指定的cpu,提高网卡收包效率 把下面“eth1” 修改成对应的网卡名称 irq=$(cat /proc/interrupts | grep eth1 | cut -d':' -f 1); echo $irq for i in $...
全志R16平台的android6.0.1系统下的RTL8188EU的配置V1.0 2017/5/31 10:30 1、R:\wyb\rtl8188eu_r16m_20161208\android\device\softwinner\astar-evb30\overlay\frameworks\base\core\...注: 某些输入文件使用或覆盖...
oracle下利用proc在 vc++开发的一个小例子,可以用来扩展其他的应用。