(3)
- выражение, а не строка; он оценивается до номер3
.
'3'
- строковый литерал, он не оценивает ни одного числа, но может быть отлит его с помощью to_i
. Правила quite simple:
Возвращает результат интерпретации ведущих символов в качестве ул базовой базы целого (между 2 и 36). Посторонние символы минус конец действительного числа игнорируются. Если номер недействителен, начинается старт, возвращается 0. Этот метод никогда не вызывает исключения , когда база действительна.
'(3)'
- еще один строковый литерал, опять же он не оценивает какое-либо число сам по себе. Проблема в том, что вы не сможете заставить анализатор «понять» каким-то образом, что (
в начале этой конкретной строки следует рассматривать как разделитель - и по существу игнорируется. Это не так, как это работает.
Одно из возможных решений заключается в замене (
символ в начале строки с sub
(как завершающие нецифровые символы игнорируются to_i
):
'(3)'.sub(/^\(/, '').to_i => 3
Но я действительно интересно, почему вы получите скобки в первую очередь здесь.
Благодарим Вас за исчерпывающий описание. (Я признаю, что могу посмотреть на документацию, я думал, что to_i обрабатывает такие строки). Использование скобок - это просто эстетическая проблема, неважно. – optimista