рубин удваивает вопросительный знак [дубликат]

Этот вопрос уже имеет ответ здесь:

Я столкнулся с этой частью кода Ruby:

str[-1]==??

О чем является двойной вопросительный знак всеми? Никогда замечаемый это прежде.

14
задан Cameron 6 February 2010 в 14:13
поделиться

2 ответа

Ruby 1.8 имеет синтаксис префикса?, Который превращает символ в его кодовое значение ASCII. Например, ? A - это значение ASCII для буквы a (или 97). Двойной вопросительный знак, который вы видите, на самом деле представляет собой просто число 63 (или значение ASCII для ? ).

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

Для обратного преобразования можно использовать метод chr :

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

??.chr   # => "?"

В Ruby 1.9 синтаксис ? A возвращает сам символ (как и синтаксис квадратных скобок для строк):

??           # => "?"

"What?"[-1]  # => "?"
21
ответ дан 1 December 2019 в 12:26
поделиться

Как говорит Райан, ? префикс дает вам значение 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
2
ответ дан 1 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: