Почему разработчики C # придают ключевое слово 'using' трем различным значениям? [закрыто]

Если вы хотите получить немного больше информации, кроме ответа Даниэля Розмана:

__repr__ и __str__ - две разные вещи в python. (обратите внимание, однако, что если вы определили только __repr__, вызов class.__str__ переводится в вызов class.__repr__)

Цель __repr__ должна быть однозначной. Кроме того, когда возможно сервер, вы должны определить реестр так, чтобы (в вашем случае) eval(repr(instance)) == instance

С другой стороны, цель __str__ должна быть переименована; так что имеет значение, если вам нужно распечатать экземпляр на экране (для пользователя, возможно), если вам не нужно это делать, тогда не реализуйте его (и, опять же, если str в не реализован будет называться repr)

Кроме того, при типе вещей в интерпретаторе Idle он автоматически вызывает повторное представление вашего объекта. Или когда вы печатаете список, он вызывает list.__str__ (который идентичен list.__repr__), который вызывает в свою очередь репрезентативное представление любого элемента, содержащего список. Это объясняет поведение, которое вы получаете, и, надеюсь, как его исправить

13
задан G-Wiz 8 May 2010 в 14:38
поделиться

4 ответа

Это выбор джагдмента. Лично я бы сделал выбор, который вы предлагаете: использовать что-то вроде "alias" и "import". Замечу, что "alias" является контекстным ключевым словом C# и используется для объявления того, что внешний псевдоним используется в конкретном файле; кажется более естественным использовать его для объявления псевдонима типа вместо "using".

Форма утверждения "using" была добавлена довольно поздно; разработчики хотели использовать "using" не только потому, что оно уже является ключевым словом, но и потому, что оно подчеркивает, что ресурс используется в определенной области кода, а затем исчезает. Тот факт, что "using" уже имеет значение в директивном смысле, был счастливой случайностью.

Если эта тема вас заинтересовала, я написал несколько статей на эту тему. Здесь, например, есть статьи о том, как "fixed", "partial" и "into" также имеют несколько значений в C#:

http://blogs.msdn.com/ericlippert/archive/tags/What_2700_s+The+Difference_3F00_/default.aspx

В другом ответе также есть ссылка на мою статью о том, как мы следим за тем, чтобы не слишком много слов было зарезервировано для использования языком:

http://ericlippert.com/2009/05/11/reserved-and-contextual-keywords/

13
ответ дан 1 December 2019 в 17:55
поделиться

Eric Lippert (который работал и, как я полагаю, сейчас работает в команде C# в Microsoft) опубликовал комментарий в ответ на аналогичный вопрос в своем блоге (первый комментарий). Цитирую его:

Это сложный момент языкового дизайна; когда одно ключевое слово используется для обозначения двух совершенно разных концепций, это может сбить с толку. Но введение нового ключевого слова для каждого понятия делает язык немного раздутым. Лично я бы выбрал "imports" или другой подобный синтаксис для для директивной формы, чтобы гарантировать, что ее чтобы ее не путали с формой утверждения, но я понимаю, что это суждение выбор.

7
ответ дан 1 December 2019 в 17:55
поделиться

Я думаю, что разработчик языка вынужден использовать как можно меньше ключевых слов, чтобы минимизировать конфликты имен с идентификаторами. Если вы представите, как кто-то переносит код с C ++ или Java, меньшее количество ключевых слов означает меньшую вероятность конфликтов.

На самом деле это не входит в объем вашего вопроса, но этот вопрос особенно актуален при создании новой версии существующего языка. В C # 3 добавлены контекстные ключевые слова, то есть идентификаторы, которые становятся ключевыми словами только при использовании в определенной ситуации. Просто чтобы существующий код не стал недействительным.

И я согласен с @Judas, что три употребления слова «использование» не сбивают с толку (ИМХО). C # уже был - ошибочно я думаю - обвинен в том, что он слишком похож на Java. Представьте, что некоторые люди сказали бы, если бы у него было ключевое слово 'import' ...

7
ответ дан 1 December 2019 в 17:55
поделиться

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

За годы написания кода на C # я не могу сказать, что меня когда-либо смущало значение слова «использование»; это всегда ясно из контекста.

18
ответ дан 1 December 2019 в 17:55
поделиться
Другие вопросы по тегам:

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