はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
partial (Python)
from functools import partial
def partial_func(name, value):
    print(name, value)
func1 = partial(partial_func, 'aa')
func1('bb')
# aa bb
ふむふむ。
どうすRuby
lambda.rb
func2 = lambda do |name|
  partial_func = lambda do |value|
    puts "#{name} #{value}"
  end
end
func1 = func2.call('aa')
func1.call('bb')
func2.call('aa').call('bb')
引数を2回に分けて渡すと考えるなら、lambdaでも良さそう。
ありそうなパターン
消費税設定 = lambda do |消費税|
  partial_func = lambda do |税抜き価格|
    puts (税抜き価格 * (1 + 消費税)).floor
  end
end
税込み価格 = 消費税設定.call(0.1)
税込み価格.call(100)
税込み価格.call(109)
税込み価格.call(110)
# output
110
119
121
curry
消費税設定 = lambda do |消費税, 税抜き価格|
  puts (税抜き価格 * (1 + 消費税)).floor
end.curry
税込み価格 = 消費税設定.call(0.1)
税込み価格.call(100)
税込み価格.call(109)
税込み価格.call(110)
curryすると、lambdaを二重にしなくても上手くやってくれる。
class.rb
class A
  def initialize(tax)
    @tax = tax
  end
  def taxin(value)
    puts (value * (1 + @tax)).floor
  end
end
a = A.new(0.1)
a.taxin(100)
a.taxin(109)
a.taxin(110)
まとめると、既存のメソッドを再利用する分には便利ですが、新規で作るならクラスで十分かも。
メモ
- Python の partial を学習した
 - 百里を行く者は九十里を半ばとす