在一行中测试Numeric的变量

时间:2015-07-15 22:27:51

标签: ruby-on-rails ruby

我在另一个thread上找到了此代码。

def is_number? string
  true if Float(string) rescue false
end

我没有使用方法返回true或false,而是希望这样做" is_numeric"在if语句中用一行测试。有人可以解释一下这是否可能?当字符串变量为空且包含非数字字符时,我现在都会收到错误。

if Float(string)
  * do something
else
  * do something else
end

2 个答案:

答案 0 :(得分:1)

if Float()是无意义的代码,因为Float()将返回真值或引发错误(基于我对source code的有限看法 - 在写作时,您可以按照来自line #2942的代码路径。我建议你提出错误的问题/看错了问题(了解你实际想要实现的目标是有帮助的)。

要在一行上使用Float()执行某些操作并避免破坏代码,请使用rescue作为语句修饰符,如在is_number?方法中所做的那样。

Float(string) rescue 0.0 # trying to emulate String#to_f!

答案 1 :(得分:0)

确保电话号码是10位数,仅限数字,非常简单。

PHONE_NUM_LENGTH = 10
string.length == PHONE_NUM_LENGTH && string.count('0-9') == PHONE_NUM_LENGTH

将返回表示此检查的true / false值。这比正则表达式更有效。

第一部分,

string.length == PHONE_NUM_LENGTH

检查字符串是否长度为10个字符。第二,

string.count('0-9') == PHONE_NUM_LENGTH

检查它是否只有10个数字字符。