`
yjjxf
  • 浏览: 42426 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Ruby 方法定义和使用

    博客分类:
  • Ruby
阅读更多

 一、方法定义

ruby 代码

  1. def name[([arg [=value],.....][,*varg][,&blockarg])]   
  2. body   
  3. end  

 

ruby 代码
  1. name ->  methodName   
  2.                constant.methodname   
  3.               (expr).methodname  


    
    1、使用关键字def,方法名必须以一个小写字母开始。可以是重定义的操作符,也可以是个名字。
   
    2、习惯约定:表示查询的方法通常以?结尾;会修改接受者对象的方法,以!结尾;赋值方法以=结尾。
  
    5、在方法定义中不能定义非singleton的类或模块。如果在一个方法中定义另一个方法(可以是实例或单例方法),内部方法只有在外部方法执行是才能被定义。但是,在被嵌套的方法的上下文中,内部方法是一个自包含的。可以在被嵌套方法外调用


    6、方法的返回值是执行的最后一个表达式的值,或return表达式的返回值。如果return不带参数,返回值为nil,如果带一个参数,则返回该参数的值,如果参数多于一个,则返回一个包含所有参数值的数组对象。


    7、如果方法定义在类或模块中,由普通方法名字定义的方法是实例方法,一个实例方法仅能通过发送给它的名字给一个接收者调用,且该调用者必须是定义它的类的一个实例。
        如果是在类或模块外定义,由普通方法名定义的方法将作为私有方法添加到类Object中。因此,无须指定显示的接收者就可以在任意上下文中调用它。


    8、对于constant.methodname或(expr).methodname定义的方法名时,将创建一个与常量或表达式引用的对象相关联的方法。 该方法只能以表达式引用的对象作为接收者调用。这个定义风格将创建单个对象的方法或称为单例方法

 二、方法参数
    1、方法定义的普通形参是局部变量。后面可以跟一个等号作为默认值的表达式。表达式在方法被调用的时候求解。表达式是从左到右求解的。表达式可以引用参数列表中它前面已经定义的参数。


    2、可变个数参数或者想用一个形参接受多个实参,在"普通"的参数名前放置一个(*)号即可。这个带星号的参数必须放置在普通参数后面,Ruby设置数组参数使其引用一个数组类的对象。如果参数超过普通参数的个数时,所有剩余的参数会被装入到一个新的Array对象中,但是,如果没有超过普通参数,则该数组是个无内容的对象,但对象本身不为nil。如果,数组参数跟在带默认值的参数后面,那么参数优先被用了override默认值, 剩下的形成数组 
        def x(a,b=9,*c)
        
         ....
        end
        x(1) -> [1,9,[]]


    3、block参数(在普通的参数名前放置一个&符号)必须放在参数列表的最后一个。无论何时调用该方法时,都会检查是否有关联的块。如果有,块将被转换成Proc类的对象,然后赋值给块参数。如果没有块,该参数将设置为nil


三、方法的调用

ruby 代码
  1. [receiver.]name[parameter][block]   
  2. [receiver::]name[parameter][block]   
  3.   
  4. parameters     <---  ([param,.....][,hashlist][*array][&a_proc])   
  5.   
  6. block <--- {blockbody}   
  7.                 do blockbody end  


     1、如果参数列表中出现一个以key=>value配对的列表,Ruby会将这个列表包装成一个新hash对象对待。作为一个参数传入方法。

ruby 代码
  1. def method(a,b,*c)   
  2.   
  3.   #......   
  4. end  
  5.   
  6. method (1,'e'=>2,'f'=>3,4)       ---->  a=1,b={'e'=>2,'f'=>3},c=4  


     2、在形参后面出现一个前面带星号的参数,如果这个参数是一个数组,ruby将用相应的数组元素,将它替换零个或多个形参。如果不是,将为nil
     3、block可以关联一个方法调用。该调用可以使用字面量形式的block(它必须和方法调用的最后一行在同一行),也可以关联
     一个参数,该参数包含对带&符号的Proc或Method对象 的应用。
       注意:不管block参数存在与否,Ruby使用全局函数Kernel.block_given?方法的值来判断是否存在与本调用相关联的block

分享到:
评论
2 楼 manneting 2013-02-05  
喜欢!
很不错!
1 楼 yours2008 2007-07-02  
ruby方法的参数,如何才能够设置成引用的参数,就是在程序内部的修改,程序外部也能够看见。yi

相关推荐

    Ruby 方法、类

    模块在Ruby中用于封装相关的类和方法,也可以实现类的多重继承。模块通过`module`关键字定义,使用`include`或`extend`导入到其他类或对象中: ```ruby module MathOperations def add(a, b) a + b end end ...

    Ruby-Referral一个命令行工具用于查找过滤和排序Ruby代码的定义和引用

    Referral可以帮助开发者快速定位到类的定义,理解其属性和方法。方法是类或模块中定义的行为,Referral能找出方法的调用位置和实现,这对于理解代码流程和优化性能至关重要。变量在Ruby中分为局部变量、实例变量、类...

    06Ruby 方法.docx

    Ruby 方法的定义遵循一定的规则,例如方法名必须以小写字母开头。 #### 定义方法 方法的基本定义结构如下: ```ruby def method_name # 方法体 end ``` 若要定义接受参数的方法,语法稍作调整: ```ruby def ...

    ruby trap 初学者使用

    - Ruby允许在运行时修改类和方法,这可能导致难以预料的行为。了解何时利用这一特性,何时避免是关键。 7. **集合和迭代**: - Array、Hash和Range是常用的集合类型。理解它们的方法如`map`、`each`和`select`...

    Ruby新手学习书(Ruby语言中文教程)和Rails_4_days

    3. **函数与方法**:了解如何定义和调用函数,以及Ruby中的块、 Proc 和 Lambda 的使用。 4. **面向对象编程**:Ruby是一种纯面向对象的语言,你将学习类、对象、继承、模块、封装和多态等核心概念。 5. **异常...

    Ruby-Functo是ruby中的可组合方法对象

    标题提到的“Ruby-Functo”就是Ruby中实现可组合方法对象的一个库,它为开发者提供了更灵活和模块化的代码组织方式。 Functo库的设计理念是让函数或方法像对象一样可以被操作、组合和复用。在传统的面向对象编程中...

    Ruby基础语法使用方法全套讲解,风格讲解指南大全

    4. **函数与方法**:Ruby中,函数和方法是同义词。你可以定义自己的方法,使用`def`关键字,通过`return`返回值。Ruby还支持匿名函数(Proc和Lambda),它们可以作为参数传递,也可以赋值给变量。 5. **类与模块**...

    ruby使用文档

    - Ruby中函数和方法是一致的概念,使用`def`定义,`end`结束。 - 可以定义默认参数、可变参数(`*args`)和关键字参数。 - 方法可以通过`yield`调用块,实现类似闭包的功能。 4. **类与模块**: - 类是面向对象...

    ruby使用json库

    如果你想保持日期和时间的原始类型,可以自定义JSON生成器,或者使用`as_json`方法来定义如何转换这些对象。 4. **安全解析**: JSON库还提供了一个安全的解析选项,可以防止代码注入攻击。`JSON.parse`接收一个...

    在Ruby中创建和使用哈希的教程

    在本教程中,我们将详细介绍如何在Ruby中创建和使用哈希,罗列各种方法和技巧,并解释哈希的特性。 ### 理解哈希的基本概念 在Ruby中,哈希类似于其他编程语言中的字典或关联数组。每个键值对中的键(key)是唯一...

    使用Ruby来处理文本的教程

    接下来,我们将详细探讨Ruby中字符串的操作方法,以及如何利用Ruby处理不同格式的文本数据,例如CSV和XML。 首先,Ruby中的字符串处理功能非常丰富。字符串是Ruby中一个类(String class),它提供了一整套方法来...

    ruby-enum:在Ruby中定义枚举的便捷方法

    目录散列检索键和值将键映射到值将值映射到键重复的枚举键或重复的值遗产贡献版权和许可相关项目 用法枚举可以定义为常量或类方法来访问,这是优先考虑的问题。 常数定义枚举,并将其作为常量引用。 class ...

    Ruby-rabl普通的ruby模板包含jsonbsonxmlplist和msgpack支持

    在实际项目中,RABL可以通过`render`方法在Rails或其他基于Ruby的框架中使用,将模板应用于模型实例,然后返回格式化的数据。`nesquena-rabl-3043147`这个文件可能是RABL的源码或者示例,你可以研究它来学习RABL的...

    Ruby编程Ruby Programming

    - **动态性**:Ruby支持运行时修改代码结构,允许开发者在程序运行过程中改变类和方法的行为。 - **元编程能力**:Ruby提供了一种称为元编程的技术,使得程序可以自我修改和自我扩展。 ### 二、Ruby编程基础 #### ...

    Ruby元编程 源代码 Metaprogramming Ruby source code

    总的来说,Ruby元编程是一个强大的工具,但同时也需要谨慎使用,因为过度的元编程可能导致代码难以理解和维护。正确地应用元编程可以提升代码质量,使代码更具有适应性和扩展性。通过学习这本书和其源代码,开发者将...

    笨方法学ruby-中文版

    书中会介绍变量、数据类型(如字符串、整数、浮点数、布尔值、数组、哈希)、控制结构(如条件语句if/else,循环for、while、until),以及函数和方法的定义与调用。 2. **面向对象编程**:Ruby的核心特性之一就是...

Global site tag (gtag.js) - Google Analytics