Ruby中的各种方法定义和调用(函数式方法|实例方法|类方法)

来源:互联网 发布:论文查重软件免费 编辑:程序博客网 时间:2024/05/17 04:32
1.ruby方法的定义

(1)不带参数的方法

def function_name   statement    ……end

调用方式:

function_name  or function_name()

(2)带参数的方法定义

def function_name(parm1, parm2, …)   statement    ……end

调用方式:

function_name(parm1,parm2, …)orfunction_nameparm1, parm2, …

(3)可变参数的方法定义

通过用“* 变量名”的形式来定义参数个数不确定的方法。

def foo(*args)    argsendp foo(1, 2, 3)#至少需要指定一个参数的方法可以像下面这样定义def meth(arg, *agrs)    [arg, args]endp meth(1)p meth(1, 2, 3)
(4)关键字参数的方法定义

使用关键字参数定义方法的语法如下所示:

def 方法名(参数1: 参数1的值, 参数2: 参数2的值, …) 希望执行的处理end
除了参数名外,使用“参数名 : 值”这样的形式还可以指定参数的默认值。用关键字参数改写计算立方体表面积的 area 方法的程序如下所示:

def area2(x: 0, y: 0, z: 0)    xy = x * y    yz = y * z    zx = z * x    (xy + yz + zx ) * 2endp area2(x: 2, y: 3, z: 4)p area2(z: 4, y: 3, x: 2)p area2(x: 2, z: 3) #=> 12
备注:可以用散列作为实参传递给方法的关键字参数,实例如下:

def area2(x: 0, y: 0, z: 0)    xy = x * y    yz = y * z    zx = z * x    (xy + yz + zx ) * 2end args1 = {x: 2, y: 3, z: 4}p area2(args1) args2 = {x: 2, z: 3}p area2(args2)

(5)带块的方法定义

def myloop    while true        yield # 执行块    endendnum= 1 # 初始化nummyloop do    puts "num is #{num}" # 输出num    break if num > 100 # num超过100时跳出循环    num *= 2  # num乘2end

这里第一次出现了 yield,yield 是定义带块的方法时最重要的关键字。调用方法时通过块传进来的处理会在 yield 定义的地方执行。执行该程序后,num 的值就会像 1、2、4、8、16……这样 2 倍地增长下去,直到超过 100 时程序跳出 myloop 方法。


备注:方法的调用可以省略小括号()


2.Ruby方法的分类

(1)实例方法

实例方法是最常用的方法。假设有一个对象(实例),那么以这个对象为接收者的方法就被称为实例方法。举例来说

p "10, 20, 30, 40".split(",") #=> ["10", "20", "30", "40"]p [1, 2, 3, 4].index(2) #=> 1p 1000.to_s #=> "1000"
(2)类方法

接收者不是对象而是类本身时的方法,我们称之为类方法。例如,我们在创建对象的时候就使用到了类方法。

Array.new # 创建新的数组File.open("some_file") # 创建新的文件对象Time.now # 创建新的 Time 对象
调用类方法时,可以使用 :: 代替.。在 Ruby 语法中,两者所代表的意思是一样的。

类名.方法名类名::方法名
(3)函数式方法

没有接收者的方法,我们称之为函数式方法。

print "hello!" # 在命令行输出字符串sleep(10) # 在指定的时间内睡眠,终止程序


0 0
原创粉丝点击