1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| # 5. 关键字参数 (可指定默认值)
def 方法名(参数1: 参数1的值, 参数2: 参数2的值, ...)
code ...
end
def area(x: 0, y: 0, z: 0)
xy = x * y
yz = y * z
zx = z * x
(xy + yz + zx) * 2
end
p area(x: 2, y: 3, z: 4) # 52
p area(z: 4, y: 3, x: 2) # 52 (参数顺序可变)
p area(x: 2, z: 3) # 12 (省略 y)
# 不需指定默认值时
def volume(x:, y: 2, z: 4)
x * y * z
end
p volume(x: 2, y: 3) # 24
p volume(y: 3, z: 4) # ArgumentError
volume(foo: 0) # unknow keyword
# 搜集关键字参数
def meth(x: 0, y: 0, z: 0, **args)
[x, y, z, args]
end
p meth(z: 4, y: 3, x: 2) # [2, 3, 4, {}]
p meth(x: 2, z: 3, v: 4, w: 5) # [2, 0, 3, {:v=>4, :2=>5}]
# 关键字参数与普通参数搭配使用
def func(a, b: 1, c: 2)
code ...
end
func(1, b: 2, c: 3)
# 用散列传递参数
def area(x: 0, y: 0, z: 0)
code ...
end
args1 = {x: 2, y: 3, z: 4}
p area(args1)
|