やる気がストロングZERO

やる気のストロングスタイル

Rubyのメソッド引数メモ

Rubyのメソッド定義時の引数のパターンをメモ

飾りなし

def some_method(a)
    puts a
end

some_method 100  # 100

飾りなし(デフォルト値指定あり)

def some_method(a=100)
    puts a
end

some_method  # 100

可変長引数(配列受け取り)

def some_method(*a)
    p a
end

some_method 1, 2, 3  # [1, 2, 3]

キー指定

def some_method(a:)
    puts a
end

some_method  a: 100  # 100

キー指定(デフォルト値指定あり)

def some_method(a: 100)
    puts a
end

some_method   # 100

可変長引数(キー指定受け取り)

def some_method(**a)
    p a
end

some_method a: 1, b: 2, c: 3  # {:a=>1, :b=>2, :c=>3}

ブロック

def some_method(&block)
    block.call 100
end

some_method do |value|
    puts value
end   # 100

※&blockはyieldで代用可能

上記全タイプの引数を同時に定義する場合(定義できる順番があるっぽい)

class SomeClass
  attr_accessor :a, :b, :c, :d, :e, :others, :block

  def some_method(a, b, c="c", *d, e: "e", **others, &block)
    @a = a
    @b = b
    @c = c
    @d = d
    @e = e
    @others = others
    @block = block
  end
end

# 使用
obj = SomeClass.new
obj.some_method "a", "b", "c", "d1", "d2" , e: "e", f1: "f1", f2: "f2" do |greet|
  greet
end

# 結果
obj.a # "a"
obj.b # "b"
obj.c # "c"
obj.d # ["d1", "d2"]
obj.e # "e"
obj.others # f1=> "f1", f2=> "f2"
obj.block.call "hello" # "hello"