我的代码看起来像这样,并且有效:
if Target.find_by_shrunk(params[:shrunk])
@target = Target.find_by_shrunk(params[:shrunk])
else
# do something else
end
Target::find_by_shrunk(params[:shrunk])
被调用两次。为了避免这种情况,我想运行Target.find_by_shrunk(params[:shrunk])
一次,捕获true
/ false
结果,然后在条件语句中使用该变量。我试过这样做:
does_it_exist = (this_target = Target.find_by_shrunk(params[:shrunk]))
if does_it_exist
@target = this_target
else
# do something else
end
但不幸的是,这并不是我想要的。
如何同时执行赋值,并以某种方式捕获执行该赋值的真/假结果,因此我不必连续两次运行相同(昂贵)的代码?
答案 0 :(得分:4)
你可以做到
unless @target = Target.find_by_shrunk(params[:shrunk])
# do something else
end
unless
与if not
相同。归因会返回归因的值,如果它与nil
和false
不同,则会计算为true
。
答案 1 :(得分:2)
这应该有效:
if this_target = Target.find_by_shrunk(params[:shrunk])
@target = this_target
else
#do something else
end
答案 2 :(得分:1)
试试这个
something_else unless @target = Target.find_by_shrunk(params[:shrunk])
或者,如果你需要积极的
do_something if @target = Target.find_by_shrunk(params[:shrunk])
答案 3 :(得分:0)
你可以将@target初始化为nil,所以当你来测试它时,如果它是nil,请调用find_by_shrunk并将结果分配给@target。