Терминология Ruby Вопрос: Является ли это декларацией, определением и назначением Ruby одновременно? - PullRequest
1 голос
/ 23 марта 2009

Если я скажу:

x = "abc"

это похоже на объявление, определение и присвоение, все одновременно, независимо от того, говорил ли я что-либо о х в программе ранее.

Это правильно?

Я не уверен, какова правильная терминология в Ruby для объявлений, определений и назначений или есть ли даже различия между этими вещами из-за динамической типизации в Ruby.

@ tg: Что касается вашего пункта № 2: даже если x существовал до оператора x = "abc", не могли бы вы назвать оператор x = "abc" определением / переопределением?

Ответы [ 2 ]

7 голосов
/ 23 марта 2009
  1. Декларация: Нет.
    Нет смысла говорить о объявлении переменных в Ruby, потому что нет ничего аналогичного объявлению в языках. Языки, разработанные для компиляторов, имеют декларации, потому что компилятор должен знать заранее, какие большие типы данных и как получить доступ к различным их частям. например, , если я скажу на C:

    int *i;
    

    тогда компилятор знает, что где-то есть некоторая память, выделенная для i, и она настолько велика, насколько это необходимо для хранения указателя на int. В конечном итоге компоновщик соединит все ссылки на i вместе, но по крайней мере компилятор знает, что он где-то там.

  2. Определение: Возможно .
    Определение обычно устанавливает начальное значение для чего-либо (по крайней мере, в знакомых скомпилированных языках). Если x не существовало до оператора x = "abc", то, я думаю, вы могли бы назвать это определением, поскольку именно тогда Ruby необходимо присвоить значение символу x.

    Опять же, однако, определение - это конкретный термин, который люди обычно используют, чтобы отличить первоначальное статическое присвоение значения некоторой переменной от объявления этой переменной. В Ruby у вас нет такого заявления. Обычно вы просто говорите, что переменная определена , если ей присвоено значение где-то в вашей текущей области видимости, и вы говорите, что undefined , если нет.

    Вы обычно не говорите о том, что у него есть определение , потому что в Ruby это всего лишь назначение . Не существует особого контекста, который оправдывал бы, что вы говорите определение , как в других языках.

    Что приводит нас к ...

  3. Назначение: Да.
    Вы можете определенно назвать это присваиванием , поскольку оно присваивает значение символу x. Я не думаю, что кто-то не согласится с этим.

0 голосов
/ 23 марта 2009

В значительной степени. И если на следующей строке вы делаете:

x = 1

Тогда вы просто изменили его и присвоили ему (теперь это целое число, а не строка). Печатание утки очень отличается от того, к чему вы, вероятно, привыкли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...