`
wiisola
  • 浏览: 87367 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

#006_用to_proc标记缩写代码块

阅读更多
我们经常需要将一个代码块传递给迭代器,并在代码块中调用另一个方法。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
分享到:
评论

相关推荐

    linux内核指导相关源代码

    #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

    ping_cap_set_proc报错分析.docx

    Ping 命令报错分析 - cap_set_proc 错误解决方案 Linux 权限控制机制中, capability 是一种基于进程的权限控制机制,它可以将传统的基于用户的权限控制机制进行细粒度的控制。Capability 机制可以控制进程的某些...

    The Linux 2.4内核启动过程.pdf

    初始化进程控制块缓存,加快进程切换速度。 #### vfs_caches_init()函数 初始化虚拟文件系统缓存,优化文件操作性能。 #### buffer_init()函数 初始化缓冲区管理,用于提高磁盘I/O效率。 #### page_cache_init()...

    seq_file proc 文件系统的实现

    ### seq_file 与 proc 文件系统的实现 #### 概述 `proc` 文件系统是一种特殊的文件系统,它存在于内存中,并不占用实际磁盘空间。它主要用于提供系统内核的当前状态信息供用户空间程序访问。通过 `proc` 文件系统...

    hello_proc.tar.gz_device_create_file_proc_hello

    本主题将深入探讨如何利用proc文件系统创建一个设备文件,具体案例为"hello_proc.tar.gz_device_create_file_proc_hello"。 首先,`/proc`文件系统是一个虚拟文件系统,它并不存储在磁盘上,而是由内核动态生成的,...

    ProC-Sample.rar_oracle_oracle proc sample_proc

    标题中的"ProC-Sample.rar_oracle_oracle proc sample_proc"揭示了这是一个关于Oracle数据库的ProC编程示例。ProC是Oracle提供的一种预编译器,它允许开发者在PL/SQL中嵌入C代码,以提高性能和处理复杂计算。这个...

    8192CU 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_...

    Oracle_ProC.rar_linux oracle_linux proc *c_linux proc oracle_ora

    - ProC是Oracle预编译器的简称,它将C语言源代码转换为PL/SQL块,然后这些块可以在Oracle数据库中执行。 - ProC提供了更接近底层数据库操作的方式,有助于提高性能,尤其是在处理大量数据时。 - ProC支持类型安全...

    kernel_module_list_first_proc-_level.c.gz_kernel list

    kernel_module_list_first_proc _level

    hide_file_and_proc.rar_hide_文件隐藏驱动

    `hide_file_and_proc.c`源代码很可能是用C语言编写的,这是一门常用于编写低级别系统代码的语言。在源代码中,可能会包含以下关键部分: 1. **设备驱动程序初始化**:这部分代码会注册设备驱动,使其在系统启动时...

    ARM-Linux内核启动的分析

    由于分析基于MX1平台的内核启动过程,因此只关注通用代码以及定义在`CONFIG_ARCH_MX1ADS`配置下的代码。 #### 二、相关定义介绍 ##### 2.1 TEXTADDR - **定义**:`TEXTADDR`是内核映像的虚拟地址,通常位于内核...

    linux proc PDF

    seq_printf(m, "Link to /proc/sys/kernel/core_pattern\n"); return 0; } my_proc_link = proc_create("my_link", 0, NULL, &my_proc_link_fops); ``` 这里 `my_link` 将指向 `/proc/sys/kernel/core_pattern`...

    msmmPrj.rar_VC++ ORACLE_oracle_vc oracle_vc oracle 10g proc*c

    VC++ ORACLE_oracle_vc oracle_vc oracle 10g proc*c"揭示了这个压缩包包含了一个使用VC++与Oracle数据库交互的项目示例,特别提到了`proc`,这可能是指Oracle的Pro*C,一个预编译器,用于将C或C++代码与PL/SQL结合...

    matlab导入excel代码-utl_special_case_of_column_percentages_wps_proc_r:列百分比w

    matlab导入excel代码utl_special_case_of_column_percentages_wps_proc_r 列百分比wps proc r的特例。 关键字:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI ...

    linux内核态与用户态内存共享示例

    - 使用`SetPageReserved()`标记这些页面为保留状态,这意味着它们不会被系统回收。 - 记录下分配的内存地址`kernel_memaddr`和大小`kernel_memsize`。 2. **通过proc文件系统暴露内存信息:** - 创建名为`...

    cpu_linux.rar_cpu_linux.cpp_linux 读取文件_proc cpu

    在Linux系统中,获取CPU使用情况是通过读取`/proc`目录下的特定文件来实现的,这在程序开发中非常常见,特别是对于系统监控和性能分析的应用。本主题聚焦于如何利用C++语言在Linux环境下编程来读取`/proc/stat`文件...

    multi_proc_wrong.c

    multi_proc_wrong.c 下载后直接编译运行

    11_sdi1in_hdmi_out_proc.rar_FPGA HDMI_FPGA SDI_SDI-HDMI_sdi hdmi

    本示例中的“11_sdi1in_hdmi_out_proc.rar”文件是一个FPGA设计项目,专注于SDI(Serial Digital Interface)输入和HDMI(High-Definition Multimedia Interface)输出的转换过程。这个项目对于视频处理和信号传输...

Global site tag (gtag.js) - Google Analytics