1. ホーム
  2. ruby

[解決済み] ルビーフリーズ方式

2022-03-06 06:45:57

質問

def track_for stat
      # This is a hash with 2 elements of proc
      {
        symbol: -> { send(stat) },
        array:  -> { send(stat[0], stat[1]) }
      }.freeze[stat.class.name.underscore.to_sym].call
end

freeze[stat.class.name.underscore.to_sym].call , 私はこのコードについて全く知りません。の中のコードの機能は何ですか? [] また、なぜ call メソッドを使用することはできますか?どなたか教えてください。非常に感謝しています。

解決方法は?

  • freeze - Hashの改変を防止する(凍結したオブジェクトを返す)
  • [] - ハッシュから値にアクセスする
  • stat.class.name.underscore.to_sym - これは、与えられたオブジェクトのクラス名の小文字とスネークケースのバージョンを返すと仮定しています ( underscore は標準ライブラリにないので、完全にはわからない)
  • call に関連するラムダを呼び出します。 stat.class.name.underscore.to_sym キーになります。

例えば ['foo', 'bar'] を引数として track_for を呼び出すと send(stat[0], stat[1]) ラムダを使用します。