Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

Ruby | メソッド | Procオブジェクトの受け渡し

パンくず

Ruby
メソッド
Procオブジェクトの受け渡し

概要

Procオブジェクトの受け渡しについて

内容

メソッドの引数の最後に&付きの引数を定義することで
呼び元で渡したブロックをProcとして受け渡すことができます。

def (first, &second)
  # xxxx
end

サンプルコード

class Calculator
  def initialize(price, quantity, &calculator)
    @price, @quantity, @calculator = price, quantity, calculator
  end
  
  def discount(discount_rate)
    base_sales = @price * @quantity
    return base_sales - (base_sales * @calculator.call(discount_rate))
  end
end

calculator = Calculator.new(100,10) {|unit| unit / 100.0 }
puts calculator.discount(5) # 5%割引
puts calculator.discount(10) # 10%割引

出力

950.0
900.0