我在javascript中做了很多
some_var || some_var = function(){ return "blah"}();
Run Code Online (Sandbox Code Playgroud)
我想知道红宝石中的等价物是什么,所以我能做到
some_var ||= # sequence of operations
Run Code Online (Sandbox Code Playgroud)
编辑
这Proc.new.call
引起了我的注意,但我也是在某人的代码中遇到过这个:
a ||= begin
# do some stuff
# return some stuff
end
Run Code Online (Sandbox Code Playgroud)
这在功能上等同于使用Proc.new.call
??
edit2 人们似乎对我想要实现的目标感到困惑.想象一下这在javascript中:
function someExpensiveFunction(){
# do some really expensive stuff
return "some expensive calculations"
}
a || a = someExpensiveFunction();
Run Code Online (Sandbox Code Playgroud)
显然设置a
一次......一次调用昂贵的函数...在这种情况下我不关心范围,我只需要我的返回值是一个计算的事件序列而不是单个值.
我很确定我上面的例子a ||= begin; ... end;
是等价的......
根据您的评论:
不关心范围...只是想要一个干净的语法来使用涉及多行代码的 ||= 设置变量
我不确定我是否理解为什么你觉得你不必使用 ||= 和 lambda。例如,您可以使用
if(some_var.nil?)
# do some stuff
some_var = result_of_doing_some_stuf
end
Run Code Online (Sandbox Code Playgroud)
或者,正如您在示例中所说的那样:
a ||= begin
# do some stuff
# return some stuff
end
Run Code Online (Sandbox Code Playgroud)
我不清楚为什么你必须使用 proc 或 lambda。
但如果您一心想使用 ||= 和 lambda,您可以这样做:
calculate = lambda { 1 + 1 }
some_var ||= calculate.call
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1211 次 |
最近记录: |