![](/img/trans.png)
[英]How can I get Ruby's Regexp to work in Heroku without Internal Server Error?
[英]How can I put RegExp in ruby's case condition?
像這樣的東西:
a = 6
case a
when /\d/ then "it's a number"
end
沒有運氣,它不起作用
它不起作用,因為正則表達式匹配字符串,而 6 不是字符串。 如果您執行a = '6'
,它將起作用。
當與初始化器上的值一起使用時,所有 case 都是用 === 對每個表達式進行嘗試。 問題不在於大小寫,請嘗試:
6 === /\d/
綜上所述,正則表達式僅與字符串匹配。 嘗試將第二行替換為:
case (a.is_a?(String) ? a : a.to_s)
編輯:為了回答 OP 在評論中的后續行動,這里有一個微妙之處。
/\d/ === '6' # => true
'6' === /\d/ # => false
可能對初學者來說出乎意料的是,String#=== 和 Regexp#=== 有不同的效果。 因此對於:
case 'foo'
when String
end
這將調用String === 'foo'
,而不是'foo' === String
等。
因為正則表達式匹配字符串。 A是一個Fixnum。
如果你寫a = "6"
,它會工作。 可以使用a.is_a?(Numeric)
測試 a 是否為數字
使其工作的一個小改動:
a = 6
case a.to_s
when /\d/ then "it's a number"
end
to_s 會將所有內容轉換為字符串。 請注意,您的正則表達式僅檢查字符串中任何位置是否存在數字。
這樣做可能會更好:
case a
when Numeric then "it's a number"
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.