簡體   English   中英

如何將 RegExp 置於 ruby 的情況下?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM