`
lfx_cool
  • 浏览: 67795 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

*, & 参数前缀

阅读更多
we specified the arguments as *args, meaning “collect the actual parameters passed to the method into an array named args.”

比如:
def some_method(arg1, arg2, *args)
  ...
end
调用some_method(1,2,3,4,5)相当于some_method(1,2,[3,4,5])

例1:
class File
  def self.open_and_process(*args)
  f = File.open(*args)
  yield f
  f.close()
  end
end
File.open_and_process("testfile", "r") do |file|
  while line = file.gets
    puts line
  end
end

produces:
This is line one
This is line two
This is line three
And so on...

例2
class File
  def self.my_open(*args)
    result = file = File.new(*args)
    # If there's a block, pass in the file and close
    # the file when it returns
    if block_given?
      result = yield file
      file.close
    end
    return result
  end
end

**************************************

Remember I said that you can think of blocks as being a little like an implicit parameter that's passed to a method? Well, you can also make that parameter explicit. If the last parameter in a method definition is prefixed with an ampersand (such as &action), Ruby looks for a code block whenever that method is called. That code block is converted to an object of class Proc and assigned to the parameter. You can then treat the parameter as any other varible.

class ProcExample
  def pass_in_block(&action)
     @stored_proc = action
  end
  def use_proc(parameter)
    @stored_proc.call(parameter)
  end
end
eg = ProcExample.new
eg.pass_in_block { |param| puts "The parameter is #{param}" }
eg.use_proc(99)
produces:
The parameter is 99



<Programming ruby 1.9>P65-66
分享到:
评论

相关推荐

    AT指令集详解-AT指令集详解

    AT指令的基本格式为“AT+指令”,其中AT是固定的前缀,后面的字符代表不同的功能。当发送AT指令后,通常会收到“OK”作为成功的响应,或者“ERROR”表示执行失败。每条指令前都有一个AT,例如“ATA”用于激活拨号,...

    *,&amp;的区别,输出*str,&amp;str和str

    引用则提供了一种安全的别名方式,提高了代码的可读性,常用于函数参数传递和成员函数的返回类型,确保不会意外改变原对象。 综上所述,`*` 和 `&` 在C++中扮演着至关重要的角色,它们分别关联着指针和引用的概念,...

    C#编码规范.pdf

    - **Parameter (参数)**:前缀为`parm`,例如`parmProductID`。 - **DataAdapter (数据适配器)**:前缀为`da`,例如`daProducts`。 - **DataReader (数据读取器)**:前缀为`dtr`,例如`dtrProducts`。 - **DataSet ...

    C#编码及控件命名规范

    - **参数(Parameter)**:使用前缀`parm`,例如`parmProductID`。 - **数据适配器(DataAdapter)**:使用前缀`dad`,例如`dadProducts`。 - **数据读取器(DataReader)**:使用前缀`dtr`,例如`dtrProducts`。 - ...

    ALCATEL 4400 功能代码表

    14. **修改相关分机** (前缀*68):调整与特定分机相关的参数和设置。 15. **外线重拨** (前缀*70):重新拨打最近的外线号码。 16. **直接代接** (前缀*71):允许用户代表他人接听电话。 17. **组代接** (前缀*72)...

    猫的语言-AT标准指令

    AT指令通常以“AT”作为前缀,后面跟不同的字母或数字组合来表示具体的命令。这些指令可以用来初始化Modem、设置参数、拨号、应答以及进行其他各种操作。了解和掌握AT指令对于优化Modem性能、提高网络连接质量具有...

    asp.net 2.0 展现层 开发规范

    - **参数(Parameter)**: 前缀`parm`,例如`parmProductID` - **数据适配器(DataAdapter)**: 前缀`da`,例如`daProducts` - **数据阅读器(DataReader)**: 前缀`dtr`,例如`dtrProducts` - **数据集(DataSet)**: ...

    C# 中控件命名规范

    3. **参数(Parameter)**:以“parm”开头,如`parmProductID`。 4. **数据适配器(DataAdapter)**:使用“dada”,如`daddadProducts`。 5. **数据读取器(DataReader)**:前缀“dtr”,如`dtrdtrProducts`。 6....

    前缀列表 我自己写的说明

    在这种情况下,路由器可能会通告聚合路由172.16.0.0/16以及具体路由172.16.10.0/24和172.16.11.0/24,除非明确配置了`summary-only`参数来禁止子网通告。 总之,前缀列表是网络管理中的一个重要工具,它的灵活性和...

    匈牙利命名

    - 对于单级指针变量,使用前缀`p`加上变量类型的前缀,如`pfValue`(`float*`)。 - 对于多级指针,二级指针使用`pp`,三级指针使用`ppp`,依此类推,如`ppfValues`。 **3. 全局变量** 全局变量的命名需要以`g_`...

    程序开发变量命名规范指导

    - **全局参数文件**(Param): - 前缀:`Param/Param_` - 示例:`Param/Param_Subsystem` #### 四、实例化命名规范 对于不同类型的对象实例化,推荐以下命名前缀: - **功能块实例化**: - 前缀:`fb` - ...

    附录4 DOS功能调用

    通常情况下,功能调用还会涉及到其他寄存器的使用,如AL、AX、DL等,用于传递输入参数或接收输出结果。 ### 核心功能调用解析 下面我们将详细解析部分重要的DOS功能调用: #### 1. AH = 00H - 程序终止 - **功能**...

    [宫水三叶的刷题日记]:前缀和1

    `sumRegion`方法接受四个参数,用于查询矩形区域的和,并使用前缀和公式计算结果。 6. **学习与实践**: 学习前缀和的最佳实践是通过刷题来提升技能。可以通过LeetCode的类别目录找到“前缀和”题目,按照推荐指数...

    int21中断全面罗列

    - **调用参数:** 无需传递额外参数。 - **返回参数:** - AL: 每簇包含的扇区数。 - DS:BX: 包含FAT标识字节的地址。 - CX: 物理扇区大小。 - DX: 默认驱动器的簇数量。 **2. 获取任意驱动器的FAT信息 (AH = 1CH...

    POWERCENTER参数设置

    - **关系目标的表名前缀**:可以为关系目标的表名指定前缀。 - **电子邮件地址**:在电子邮件任务和会话前后的电子邮件中,可以使用参数化电子邮件地址。 - **文件名参数化**:工作流日志文件、会话日志文件、FTP...

    python中前缀运算符 *和 **的用法示例详解

    在Python编程语言中,前缀运算符`*`和`**`扮演着非常重要的角色,尤其是在函数调用和参数传递方面。这两个运算符允许我们灵活地处理可迭代对象(如列表、元组)和字典,使代码更具可读性和效率。 首先,`*`运算符...

    OFDM.rar_ofdm 加窗_ofdm加窗_加循环前缀_加窗的ofdm_循环前缀

    通过这样的仿真,可以分析不同参数对系统性能的影响,例如窗函数类型、CP长度等,并优化系统设计以适应实际应用需求。 综上所述,这个压缩包中的资源可以帮助我们深入理解OFDM系统中加窗和加循环前缀的重要性,以及...

    阿里云相关手册

    - `ConnectionStringPrefix`: 连接地址前缀。 - `Port`: 数据库端口。 - **返回参数**: - `ConnectionStringAvailable`: 连接地址是否可用的标志,`true`或`false`。 ##### 3.2 检查数据库名是否可用 - **描述*...

Global site tag (gtag.js) - Google Analytics