Ruby:如果有条件,如何组合put和return?

时间:2017-07-31 14:41:46

标签: ruby-on-rails ruby

如何打印消息然后从ruby中的函数返回?

2.3.4 :038 > def foo(num)
2.3.4 :039?>   print "Your number is: #{num}" && return if num > 10
2.3.4 :040?>   print "Number too small"
2.3.4 :041?>   end
 => :foo
2.3.4 :042 > foo(47)
 => nil
2.3.4 :043 > foo(7)
Number too small => nil
2.3.4 :044 >

当我用47打电话给foo时,为什么输出中没有Your number is: 47

PS:这个函数也可以用其他更简单的方式编写,我只想通过这个函数来表达我的疑问。

7 个答案:

答案 0 :(得分:4)

因为Ruby读取了这一行

print "Your number is: #{num}" && return if num > 10
像这样

print("Your number is: #{num}" && return) if num > 10

return有机会print之前,该方法导致print("Your number is: #{num}") || return if num > 10

添加一对括号有助于Ruby解析所需的顺序:

UBound(payCSV, 2)

答案 1 :(得分:2)

您有一个优先级问题,可以使用括号修复。但是,由于您尝试表达控制流,因此应使用控制流运算符andor而不是布尔运算符&&||

这个成语是这样的:(只是示例,它不仅限于returnfail

do_something and return "it worked"

或:

do_something or fail "it didn't work"

它允许您根据第一个表达式是否成功来计算第二个表达式。 do_something应该在成功时返回真值,在失败时返回虚假值。

print但总是返回nil,因此在这方面它没有按预期工作。你必须扭转逻辑:

print "Your number is: #{num}" or return

但是这不再是自然的阅读,是吗?此外,始终会调用return,因为print永远不会返回真值。你真的想要:

print "Your number is: #{num}"
return

我只想写:

def foo(num)
  if num > 10
    puts "Your number is: #{num}"
  else
    puts "Number too small"
  end
end

答案 2 :(得分:1)

emulator -gpu off -avd arch -kernel /pathto/goldfish/arch/x86/boot/bzImage -show-kernel

我认为这是更清洁的方式,使用If三元组合。希望这有帮助

答案 3 :(得分:1)

由于print(和puts)返回nil,所以效果也很好:

def foo(num)
  return print "Your number is: #{num}" if num > 10
  print "Number too small"
end

并且为了显示出更清晰的意图,请将guard clause放在第一位:

def foo(num)
  return print "Number too small" if num <= 10
  print "Your number is: #{num}"
end

示例:

> foo 47
Your number is: 47=> nil
> foo 7
Number too small=> nil

答案 4 :(得分:0)

出于好奇:

def foo(num)
  print case num
        when -Float::INFINITY...10 then "Number too small"
        else "Your number is: #{num}"
        end
end

答案 5 :(得分:0)

如果语句使用;

,还可以使用另一种方法
def foo(num)
  if num < 10; print "Your number is: #{num}" && return; end
  print "Number too small"
end

答案 6 :(得分:0)

这是另一个:

print "Your number is: #{num}" and return if num > 10

更新:忽略我的回答!正如工程师们解释的那样,这是完全错误的。