tkhrsskの日記

技術ネタなど

RubyのMethodオブジェクトなど

久々Ruby勉強。

Methodオブジェクトとか、lambda記法とかを備忘メモ。 Commandパターンとかに使おうかなぁと。

コード例

#!/usr/bin/env ruby

def add(x,y)
  x+y
end

def mul(x,y)
  x*y
end

def concat(x,y)
  "#{x}#{y}"
end

a = [
  { name: "足し算", func: :add },
  { name: "掛け算", func: :mul },
  { name: "連結", func: :concat } ]

a.each { |v|
  puts "#{v[:name]} -> #{method(v[:func]).call(2,3)}"
}

計算 = {
  足す: ->(x,y){x+y} ,
  掛ける: ->(x,y){x*y} ,
  繋げる: ->(x,y){"#{x}#{y}"} }
計算.default =  ->(x,y){"未定義です"}

p 計算[:足す].call(2,3)
p 計算[:掛ける].call(2,3)
p 計算[:繋げる].call(2,3)
p 計算[:未定義].call(2,3)

出力結果

$ ./proc.rb
足し算 -> 5
掛け算 -> 6
連結 -> 23
5
6
"23"
"未定義です"