方法
Ruby中的方法就是其他语言中的函数,名称应以小写开头,以免被解释为常量。参数可有可无,可以有默认值也可以没有。每个方法都有默认的返回值,就是最后一个语句的值。
def test(a1="Ruby", a2="Perl")
puts "编程语言为 #{a1}"
puts "编程语言为 #{a2}"
end
test "C", "C++"
test
要传入数量可变的参数:
def sample (*test)
end
alias和undef的用法还不太清楚
块
块是一段包含在{}内的代码
这段代码可以从别处调用。甚至像块来传递参数都是可以的,一个或多个参数。
def test
yield 5
puts "在 test 方法内"
yield 100
end
test {|i| puts "你在块 #{i} 内"}
另一种作为函数参数的调用方法:
def test(&block)
block.call
end
test { puts "Hello World!"}
在参数前面加上&代表接收一个块作为函数的参数。这个参数一般放在最后,特别是同时有*参数出现时。
可以声明BEGIN和END块,这将在文档被加载和程序运行完毕后被调用。
模块
模块存在的目的主要就是定义一个命名空间,使这个命名空间里的方法和常量不会和其他地方有冲突。
模块定义和类定义很像,模块方法和类方法定义也很像,调用模块方法就是模块名点上方法名。调用模块常量使用模块名双冒号常量名。
module Trig
PI = 3.141592654
def Trig.sin(x)
# ..
end
def Trig.cos(x)
# ..
end
end
require语句用于引用已经有的模块。
include用于在类中嵌入模块。
module A
def a1
end
def a2
end
end
module B
def b1
end
def b2
end
end
class Sample
include A
include B
def s1
end
end
samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1
这个例子用一种奇妙的方法实现了Sample对A,B的多继承。