Footprint

We walk and learn


Project maintained by cellzero Hosted on GitHub Pages — Theme by mattgraham

读书笔记:Ruby基础教程第5版

Ruby version: 2.3.0

CH-07 方法


方法的调用

简单的方法调用

obj.func(p1, p2, ..., pn)

在面向对象的世界,调用方法可以理解为“向对象发送消息”。上面的代码中接收者为 obj ,消息为 func ,括号中的为消息的参数。在调用方法时 () 可以省略。

带块的方法调用

obj.func(p1, p2, ..., pn) do |v1, v2, ... |
  block
end
obj.func(p1, p2, ..., pn) { |v1, v2, ... |
  block
}

可以使用 do ~ end{} 将块传递给方法。使用 do ~ end 时,可以省略参数列表的 ()。使用 {} 时,只有参数列表为空才可省略 ()

运算符形式的方法调用

四则运算等二元运算符,负号等一元运算符,指定数组、散列的元素下标的 [] 等,实际上都是方法。


方法的分类


方法的定义

def func_name(p1, p2, ..., pn)
  func_content
end

默认参数

def f(a, b=1, c)
  return a + b + c
end

f(10, 100)     # => 111
f(10, 2, 100)  # => 112

方法的返回值

def f(n)
  if n < 0 then
    return
  elsif n == 0 then
    return 0
  n
end

f(-1)   # => nil
f(0)    # => 0
f(1)    # => 1

定义带块的方法

参数个数不确定的方法

def f(a, *b)
  [a, b]
end

f(1)        # => [1, []]
f(1, 2, 3)  # => [1, [2, 3]]

关键字参数

def f(a: 1, b: 2)
  a * b
end
def f(a: 0, **b)
  [a, b]
end

f(a: 1)         # => [1, {}]
f(a: 1, x: 10)  # => [1, {:x=>10}]
def f(a:1, b:2)
  a * b
end

f({a: 10})
f(a: 10)
f(x: 10)    # => ArgumentError

额外内容

把数组分解为参数

def foo(a, b, c)
  a * b * c
end

foo(1, *[2, 3])

缩进

Ruby社区使用两个空白表示一个缩进。


Back