JT's Blog

Do the right things and do the things right.

Ruby Method - *argv | &block

| Comments

用來包裝邏輯處理,算是一種refactor

語法

1
2
3
def method_name
  # logical processes
end

用法

  • module: module_name.method_name()
  • instance_method: class_name.new.method_name()
  • class_method: class_name.method_name()

參數用法

普通參數

  • 默認參數:不傳入值,以默認值替代,但若有使用除了第一個參數外,其餘皆需設定默認值
  • *argv:傳入不定長度的普通參數
  • &block:編寫要執行的邏輯 (Proc)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# *argv
def sum(a,b=0,*argv)
  sum = a + b
  argv.each { |num| sum += num } if argv
  return sum
 end

p sum(10)          # 10
p sum(10,10)       # 20
p sum(10,10,10)    # 30
p sum(10,10,10,10) # 40


# &block
def def_by_myself(*argv, &block)
  block.call(argv)
end

def_by_myself(('a'..'z').to_a) do |n|
  puts n.to_s.upcase
end

關鍵字參數

Ruby ver.2.0 加入,參數有key-value 的關係

  • 默認參數:不傳入值,則以默認值替代
  • **argv:傳入不定長度的關鍵字參數
1
2
3
4
5
6
7
def area(x: 0, y: 0, z: 0)
  return ((x*y)+(y*z)+(z*x))*2
end

p area(x: 10)              # 0
p area(x: 10, y:10)        # 200
p area(x: 10, y:10, z: 10) # 600

組合(普通+關鍵字)

機器人都可以組合,method 也一定可以!!

1
2
3
def func(a, b=0, c:0, d:0)
  # ...
end

Reference

  • Ruby Programming ver.4

Comments