`
yjjxf
  • 浏览: 42043 次
  • 性别: 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-Referral一个命令行工具用于查找过滤和排序Ruby代码的定义和引用

    Referral是一个CLI,可帮助您进行Ruby代码库的复杂分析和重构。 它在整个代码中查找,过滤和排序大多数类型的Ruby标识符(例如类,方法和变量)的定义和引用。

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

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

    Ruby编程语言

    在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...

    Ruby语言进阶教程

    Ruby语言进阶教程

    Ruby常见面试题.pdf

    请简要介绍在Ruby中的函数定义和调用方式。 7. Ruby中如何处理异常(Exception Handling)?请说明在Ruby中的异常处理机制。 8. Ruby中的数组(Array)和哈希(Hash)有什么区别?请说明在Ruby中数组和哈希的不同...

    Ruby的教程.txt

    类与对象:理解Ruby中的类和对象的概念,学习如何定义类、创建对象以及使用对象的属性和方法。 继承与多态:掌握Ruby中的继承机制,了解子类如何继承父类的属性和方法,并实现自己的特定功能。同时,学习多态的...

    Ruby 的通用遗传算法_Ruby_代码_下载

    Ruby 的通用遗传算法是一种非常简单易用的 Ruby 遗传算法: ...拿一个类来进化它并定义适应度、重组和变异方法。 使用种群创建一个 GeneticAlgorithm 对象。 根据需要多次调用进化方法,并查看最佳进化。

    Ruby面试题和答案(2024年收集更新)

    1、Ruby编程语言是什么? Ruby 是一种动态的、反射性的、通用的、开源的编程语言,专注于简单性和生产力。...Ruby 和 Python 相似之处: 高级语言支持多平台使用名为 irb 的交互式提示服务器端脚本

    ruby教程.rar

    类/方法的定义 标准库 内部函数 内部变量 内部常数 内部类/模块/异常类 附加库 Ruby变更记录 ruby 1.6 特性 ruby 1.7 特性 ruby 1.8 特性 1.6.8到1.8.0的变更点(总结) ruby 1.9 特性 obsolete 对应...

    精华ruby学习笔记和代码

    这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类的定义,函数方法,以及对象定义,其他高级用法解释,除了笔记记录的语法糖之外,还包含了一些解释性的代码,帮助...

    易语言ruby脚本交互

    易语言ruby脚本交互源码,ruby脚本交互,信息框_,加载内存DLL,释放内存DLL,取DLL导出函数地址,GetIntegerAddress,GetArrayDataAddress,脚本_直接执行,脚本_定义模块,脚本_初始化,脚本_定义类,脚本_定义类方法,脚本_...

    Ruby定义私有方法(private)的两种办法

    主要介绍了Ruby定义私有方法(private)的两种办法,本文直接给出代码实例,需要的朋友可以参考下

    Ruby的概要介绍与分析

    它支持动态类型、动态方法定义和元编程,开发者可以在运行时动态地修改类和对象的行为。这种灵活性使得Ruby成为快速原型设计和迭代开发的理想选择。 此外,Ruby拥有强大的面向对象特性,一切皆为对象。它支持类和...

    ruby语法基础教程

    §3.2 对象,属性和方法 18 §3.3 继承 20 §3.4 特殊方法与特殊类 21 §3.5 类变量与类方法 23 §3.4 存取控制 23 §3.6 元类 25 §3.7 Ruby的动态性 26 §3.8 变量 26 §3.8.1 局部变量 27 §3.8.2 实例变量 27 §...

    Ruby语言教程.docx

    元编程:Ruby 提供了丰富的元编程功能,包括运行时反射、动态方法定义等。 可扩展性:Ruby 可以通过 C 或 Java 扩展,以利用这些语言的性能优势。 社区和库:Ruby 有着活跃的社区和丰富的库资源,例如 Rails 框架...

    Ruby语言教程及案例.docx

    Ruby是一种简单而强大的面向对象编程语言,它具有清晰的语法和丰富的内置功能。以下是一个简要的Ruby语言教程和一个基本的案例: ### Ruby语言教程: #### 1. Hello World 程序 ```ruby puts "Hello, World!" ```...

    详解Ruby中的方法概念

    方法应该定义Ruby的之前调用他们,否则会引发一个异常未定义的方法调用。 语法: def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end 所以,可以定义一个简单的方法如下: def method_...

    Ruby菜鸟入门指南.md

    4. Ruby中"一切皆表达式"的设计,控制语句、方法定义等都会返回值。 5. Ruby中"一切皆方法调用",没有直接访问属性的方式,只有方法调用。 6. 变量命名约定,如局部变量、常量、实例变量、类变量等。 7. 方法命名...

    详解Ruby中的单件方法和单件类

    单件方法 Ruby允许给单个对象增加方法,这种只针对单个对象生效的方法,称为单件方法 示例代码 str = “just a regular string” def str.title? ...另外,除了上面使用的定义方法,还可以通过Obje

Global site tag (gtag.js) - Google Analytics