" - " ==" - "返回false ..为什么?

时间:2014-11-13 01:42:04

标签: ruby string irb

enter image description here

有谁知道这里发生了什么?为什么" - "未找到?在IRB中尝试一下。

如果你这样做

string = "(( :H – :2B – :3B – :HR )+( 2 * :2B )+( 3 * :3B )+( 4 * :HR ))/ :AB "

string.split(" ")[2] == "-" 

它也会返回false。

2 个答案:

答案 0 :(得分:5)

您从string.split(" ")[2]获得的角色是。这可能看起来像普通的连字符,但实际上它与普通连字符不同:-

您可以通过获取每个的序数值来看到这一点:

string.split(" ")[2].ord # => 8211
"-".ord # => 45

因此,您应该检查与unicode字符\u2013

的相等性
string.split(" ")[2] == "\u2013" # => true

或者您可以将所有\u2013替换为-

string.gsub!("\u2013", "-")
string.split(" ")[2] == "-" # => true

答案 1 :(得分:0)

您正在比较两个不同的短划线字符。通常用键盘输入的正常短划线(ascii字符45)是你要比较的,但是你要解析的文字有ascii字符8211(短划线)。

http://www.ascii.cl/htmlcodes.htm

的确,如果只输入"-" == "-",您将获得true