bas*_*ibe 2 ruby python lambda closures
这是我在Python中经常做的事情:
simple_call = lambda name: extract(some[fairly][hidden], name)
result1 = simple_call('myname')
result2 = simple_call('yourname')
result3 = simple_call('hisname')
Run Code Online (Sandbox Code Playgroud)
如果您必须从一些复杂的数据结构或一些奇怪的API中反复提取一些数据,这非常方便.
有没有办法在Ruby中做同样的事情?
简答:不.最接近的是:
simple_call = lambda {|name| extract(some[:fairly][:hidden], name) }
result1 = simple_call.call("myname")
result2 = simple_call.call("yourname")
result3 = simple_call.call("hisname")
Run Code Online (Sandbox Code Playgroud)
为什么?因为Ruby中的括号是可选的.然后,您需要告诉ruby调用该方法.例如,在Python中你可以这样做:
another_simple_call = simple_call
Run Code Online (Sandbox Code Playgroud)
你正在分配lambda another_simple_call.但是在Ruby中,没有办法知道你是否使用零参数分配或调用simple_call.
是的,有一种方法可以在Ruby中做同样的事情.它实际上是以同样的方式(模块化Python和Ruby之间的小的语法差异,当然):
simple_call = ->name { extract(some[fairly][hidden], name) }
result1 = simple_call.('myname')
result2 = simple_call.('yourname')
result3 = simple_call.('hisname')
Run Code Online (Sandbox Code Playgroud)
Ruby中的等价物就是
a = Proc.new{|name| do_something_with(name) }
a.call("anyname")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |