捕获操作的真/假结果

时间:2011-06-02 19:16:13

标签: ruby

我的代码看起来像这样,并且有效:

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

但不幸的是,这并不是我想要的。

如何同时执行赋值,并以某种方式捕获执行该赋值的真/假结果,因此我不必连续两次运行相同(昂贵)的代码?

4 个答案:

答案 0 :(得分:4)

你可以做到

unless @target = Target.find_by_shrunk(params[:shrunk])
  # do something else
end

unlessif not相同。归因会返回归因的值,如果它与nilfalse不同,则会计算为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。

相关问题