Эти две линии полностью различаются по смыслу.
Рассмотрим ваш первый один:
string[i] = string[i].ord
Это означает «присвоить это значение позиции i
в моей строке», которая пытается Струнный послушно делать, кроме, ну да, вы дали номер вместо строки поэтому он ошибается. Вы можете исправить это:
string[i] = string[i].ord.to_s
Второй пример создает переменную, и те не могут быть защищены.
Помните, что в общих чертах x[i] = y
является вызовом метода , где x = y
является присвоением переменной.
Я не уверен, что должна делать ваша начальная линия. Кажется, нет смысла заменять одну букву кучей чисел. Если вы хотите, чтобы вырваться из ваших персонажей:
string.chars.to_a
Вы также можете получить исходные байты, которые пропускают ord
шага:
string.bytes.to_a
Ahhh crystal clear now. Спасибо! Не понимая логики, что это действительно заводило меня! –
Нет проблем. Если вы исходите из языка с автоматическим преобразованием типа, такого как Perl, PHP или JavaScript, то упорный отказ Ruby справиться с чем-то подобным может показаться раздражающим. '' 1'' и '1' - это не одно и то же в Ruby. Вам нужно будет преобразовать, если вы хотите объединить значения. – tadman
"' x = y' является присваиванием переменной, предполагающим, что 'x =' не определяется как метод. " Нет. Это переменное назначение. Период. Локальные переменные определяются во время разбора, методы определяются во время выполнения. Парсенсуру нет никакого способа узнать, существует ли такой метод в этой точке кода. –