编写多行懒惰计算方法的红宝石方法是什么?

bar*_*own 2 ruby

我认为我可能不会以最红宝石的方式编写懒惰的实例化方法/属性.以此方法为例:

def tax
  @tax ||= Proc.new do
    if flat_tax > commission_plan.tax_max
      return commission_plan.tax_max
    end if commission_plan.tax_max
    if flat_tax < commission_plan.tax_min
      return commission_plan.tax_min
    end if commission_plan.tax_min
    flat_tax
  end.call
end
Run Code Online (Sandbox Code Playgroud)

有没有更像红宝石的方法来重构这种方法?

Abe*_*ker 6

def tax
  @tax ||= calc_tax
end

private

def calc_tax
  min, max = commission_plan.tax_min, commission_plan.tax_max
  if (min..max).include? flat_tax
    flat_tax
  else
    flat_tax > max ? max : min
  end
end
Run Code Online (Sandbox Code Playgroud)