Вот то, как я делаю его..., так как разделение ищет массив символа, я вырезаю первое значение в своей строке.
var values = labels.Split(" "[0]).ToList<string>();
C ++ 0x использует ключевое слово «auto» для вывода типа:
http://en.wikipedia.org/wiki/C%2B%2B0x#Type_inference
Это неплохой компромисс для этих парней, так как "авто" (AFAIK) уже было ключевым словом. Я могу представить это на C #:
auto i = 3;
Мне нравится "infer" (но тогда у меня нет проблем и с "var").
thisappearsweaklytypedbutisactuallystronglytyped i = 3;
Это единственный способ избежать путаницы! Не волнуйтесь, автозаполнение означает, что на самом деле набрать не так много времени ...
Как насчет того, чтобы оживить старое BASIC
ключевое слово LET
?
let answer = 42;
Думаю, это отличная идея. Мне самому время от времени приходилось объяснять ключевое слово var и то, что оно на самом деле является просто заполнителем для типа и по-прежнему обеспечивает строгую типизацию.
infer у меня работает! :)
То, что вы хотите сделать, невозможно. Возьмем, к примеру, выглядит ли приведенный ниже код допустимым:
class Test(object):
def _decorator(self, foo):
foo()
def bar(self):
pass
bar = self._decorator(bar)
Он, конечно, недействителен, поскольку self
не определен в этой точке. То же самое касается Test
, поскольку он не будет определен, пока не будет определен сам класс (который находится в процессе). Я показываю вам этот фрагмент кода, потому что это то, во что преобразуется ваш фрагмент декоратора.
Итак, как вы можете видеть, доступ к экземпляру в таком декораторе не является
C # должен быть символическим, как C ++, а не только ключевым словом, как VB. Как насчет «? »
? X = 5;
? Y = X.ToString();
? Z = Y + Y;
Какой тип Z? Кто знает?
С другой стороны, программисты на Pascal / Delphi и ActionScript сразу же понимают истинный смысл var
. Так зачем выделять VB6? Очень жаль, что в нем был вариант
, поэтому ребята из VB6 быстро заменили его на var
, но независимо от того, каким путем вы пойдете, кто-то где-то запутается.
Учитывая что VB6 уже давно унаследован, что var
совершенно ясно кому-то без бремени прошлого опыта (я имею в виду, сколько людей, новичков в программировании, подумают о var
означает что-то отличное от «переменной»?), и что var
специально используется для обозначения «переменной» в нескольких других популярных языках, это не кажется плохим выбором.
Очевидная проблема, которую я вижу с заданным ключевым словом infer
, заключается в том, что неочевидно, что оно определяет тип переменной. Просто глядя на него, можно было бы сделать вывод о его ценности или что-то в этом роде (особенно если RHS не является новым
-заявлением).
Мне нравится var
, и я думаю, что смысл в контексте строго типизированного языка ясен. dynamic
, с другой стороны, является «чудаком» в коде C #, поэтому более длинное семантическое именование подходит.
Я думаю, что C # был бы лучше вообще без ключевого слова "статический вывод типа". Итак, это будет работать следующим образом:
myDict = new Dictionary<string, MyClass>();
Мне было интересно, почему дизайнеры C # посчитали, что ключевое слово вроде «var» необходимо для вывода статического типа. Было ли необходимо соблюдать фундаментальные правила грамматики C #? Было ли это потому, что они уже думали о «динамическом» и хотели сделать более ясным различие между статическим и динамическим выводом типов?
В любом случае, после некоторого длительного знакомства с Python, «var» (или любое альтернативное ключевое слово или квалификатор) ) кажется совершенно излишним. Возьмите следующий код:
foreach ( item in myList ) {
// Do stuff
}
Какую дополнительную информацию добавление «var» перед «item» даст читателю?
Если ключевое слово было названо переменная
вместо var
, то мы не увидим такой путаницы. Возможно, это и было намерением, но кто-то явно подумал, что ввод переменной
был слишком многословным, что привело к неоднозначности, которую мы имеем сегодня.
Не совсем по теме, но VB.NET делает это слишком чисто. Бьюсь об заклад, это еще больше сбивает с толку бывших пользователей VB6.
Dim p = New Person()
Используется ли здесь позднее связывание или вывод типа? Лучше проверьте свойства своего проекта.