【问题标题】:Apply lambda to an object将 lambda 应用于对象
【发布时间】:2016-11-23 08:17:13
【问题描述】:

假设我在某处定义了一个变量和 lambda

phone = "1(234)567-89-01"
lambda = -> { gsub(/[^0-9]/, '') }

如何将 lambda 应用于手机以获取 12345678901

附:我知道我可以采用以下方法:

lambda = -> (arg) { arg.gsub(/[^0-9]/, '') }
lambda.call(phone)
#=> "12345678901"

但我想简洁。

【问题讨论】:

  • -> (arg) { arg } 更可取

标签: ruby lambda metaprogramming


【解决方案1】:

你可以使用BasicObject#instance_exec

phone.instance_exec &lambda
#=> "12345678901"

【讨论】:

  • 好东西@AndreyDeineko,它的好处是它不会改变原始phone 的状态(在执行之后,电话变量仍然是"1(234)567-89-01")......所以为了使用新值:new_phone = phone.instance_exec(&lambda)
猜你喜欢
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多