Вопрос по терминологии Ruby:Это декларация Ruby, определение и присвоение одновременно?
-
21-08-2019 - |
Вопрос
Если я говорю:
х = "абв"
это похоже на объявление, определение и присвоение одновременно, независимо от того, говорил ли я что-нибудь о x в программе раньше.
Это верно?
Я не уверен, какая в Ruby правильная терминология для объявлений, определений и присваиваний, и есть ли вообще различие между этими вещами из-за динамической типизации в Ruby.
@tg:Что касается вашего пункта № 2:даже если x существовал до оператора x = «abc», не могли бы вы назвать оператор x = «abc» определением/переопределением?
Решение
Декларация: Нет.
Нет смысла говорить об этом объявляя переменные в Ruby, потому что в этих языках нет ничего аналогичного объявлению.В языках, предназначенных для компиляторов, есть объявления, поскольку компилятору необходимо заранее знать, насколько велики типы данных и как получить доступ к различным их частям. например, если я скажу на C:int *i;
тогда компилятор узнает, что где-то для i отведено немного памяти, и она настолько велика, насколько она должна быть для хранения указателя на int.В конце концов компоновщик перехватит все ссылки на
i
вместе, но, по крайней мере, компилятор знает, что он где-то здесь.Определение: Вероятно.
А определение обычно устанавливают для чего-либо начальное значение (по крайней мере, в знакомых компилируемых языках).Еслиx
не существовало доx = "abc"
то, я думаю, вы могли бы назвать это определением, поскольку именно тогда Ruby должен присвоить значение символуx
.Опять же, однако, определение — это особый термин, который люди обычно используют, чтобы отличить первоначальное статическое присвоение значения какой-либо переменной от объявления этой переменной.В Ruby такого утверждения нет.Обычно вы просто говорите, что переменная определенный если ему присвоено значение где-то в вашей текущей области, и вы говорите, что это неопределенный если это не так.
Обычно вы не говорите об этом, имея определение, потому что в Ruby это всего лишь назначение.Нет никакого особого контекста, который бы оправдал ваши слова определение как и в других языках.
Что подводит нас к...
Назначение: Да.
Вы определенно можете назвать это назначение, поскольку он присваивает значение символуx
.Я не думаю, что кто-то с этим не согласится.
Другие советы
Довольно много.И если на следующей строке вы сделаете:
x = 1
Тогда ты только что переопределено его, а также присвоил ему (теперь это целое число, а не строка).Утиный набор текста сильно отличается от того, к чему вы, вероятно, привыкли.