Ruby 请问这段代码什么意思?

shangrenzhidao · 2014年12月27日 · 最后由 shangrenzhidao 回复于 2014年12月27日 · 1467 次阅读
def track_for stat

      {
        symbol: -> { send(stat) },
        array:  -> { send(stat[0], stat[1]) }
      }.freeze[stat.class.name.underscore.to_sym].call
 end

请问这个 freeze 后面方括号 和 call 什么意义呢

方括号用来访问 hash,取得的值是一个 lambda,所以用 call 来调用

蛋疼... 等价于这样写:

def track_for stat
  send *stat
end

#1 楼 @serco freeze 是做什么的?总觉得这么写很奇怪呀

查 git log,给提交者发邮件问他什么这样写。

#2 楼 @luikore 你这么写是返回一个不定参数的动态方法吗?它会自动调用吗

需要 登录 后方可回复, 如果你还没有账号请 注册新账号