ruby – 从另一个lambda调用lambda.为什么订单很重要?
发布时间:2020-12-17 03:43:06 所属栏目:百科 来源:网络整理
导读:可以从另一个lambda调用lambda: first = - { 'Ok' }second = - { first.call }puts second.call# = 'Ok' 但是当订单颠倒时: first = - { second.call }second = - { 'Ok' }puts first.call 代码失败并出现NameError: lambda_order.rb:1:in `block in main
可以从另一个lambda调用lambda:
first = -> { 'Ok' } second = -> { first.call } puts second.call # => 'Ok' 但是当订单颠倒时: first = -> { second.call } second = -> { 'Ok' } puts first.call 代码失败并出现NameError: lambda_order.rb:1:in `block in <main>': undefined local variable or method `second' for main:Object (NameError) Did you mean? send from lambda_order.rb:3:in `<main>' 即使:第二个似乎是第一个范围内的局部变量: first = -> { local_variables } second = -> { 'Ok' } p first.call # => [:first,:second] 我只使用lambdas为golfing purposes,所以我不确定范围是怎么回事.用方法或常量lambda替换第二个修复了NameError.它似乎与这个question有关但在我的情况下,两个lambdas都是在main中定义的. 你能解释一下吗? 解决方法first = -> { defined? second } second = -> { 'Ok' } p first.call 结果nil =>变量“second”未在lambda“first”中定义. first = -> { binding.receiver } second = -> { 'Ok' } p first.call 结果main =>这意味着它使用main的当前绑定,因此变量“second”仅在binding中定义. first = -> { binding.local_variable_get(:second).call } second = -> { 'Ok' } p first.call 结果“好的”.这就是为什么当我要求绑定变量“second”的内容时,代码也打印“Ok”. 简介:变量“second”未在lambda“first”中定义.变量“second”仅在binding中定义.因此,“local_variables”的输出也返回“second”,因为从绑定中检索信息. 我自己也学到了一些东西.我希望我能帮到你! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |