2010-02-06 67 views

回答

21

Ruby 1.8有一個?-prefix語法,可以將一個字符轉換爲其ASCII碼值。例如,?a是字母a(或97)的ASCII值。您看到的雙重問號實際上只是數字63(或?的ASCII值)。

?a # => 97 
?b # => 98 
?c # => 99 
?\n # => 10 
?? # => 63 

要轉換回來,你可以使用chr方法:

97.chr # => "a" 
10.chr # => "\n" 
63.chr # => "?" 

??.chr # => "?" 

紅寶石1.9,則?a語法返回字符本身(如確實對字符串方括號語法):

??   # => "?" 

"What?"[-1] # => "?" 
+0

準確地說,在1.9中不推薦使用'?'語法,因爲目前它的用途很小? – 2010-02-06 16:13:40

+0

Myrddin,這可能是一個公平的事情說。 1.9中使用'?'語法的用處不大。 – 2010-02-09 14:05:28

2

正如Ryan所說,?前綴爲您提供了字符的ASCII值。在這種情況下這很有用的原因是,當你在Ruby 1.8的字符串中使用索引表示法時,返回的是ASCII值而不是字符。例如

irb(main):009:0> str = 'hello' 
=> "hello" 
irb(main):010:0> str[-1] 
=> 111 

所以下面不考,如果一個字符串的最後一個字符是字母 'O'

irb(main):011:0> str[-1] == 'o' 
=> false 

但這:

irb(main):012:0> str[-1] == ?o 
=> true 

和(前提是你懂得這是什麼?)這比

irb(main):013:0> str[-1] == 111 
=> true 
+1

以上適用於Ruby 1.8,而不是1.9,其中''hello「[ - 1] ==」o「' – 2010-02-06 18:00:54

+2

這就是爲什麼在ruby19中使用'?o ==」o「', 「hello」[ - 1] ==?o'在ruby18和ruby19中。 – rampion 2010-02-06 18:11:42

+0

謝謝glenn,我已經更新了答案,以澄清只適用於1.8的位 – mikej 2010-02-06 20:11:51