Подтвердить что ты не робот

Что такое "бормотание"?

Я видел несколько упоминаний о "mumble typing", например, этот ответ StackOverflow: Будет ли будущая версия корневых файлов поддержки .NET на С#?

Я искал этот термин, и я не мог найти много объяснений, кроме некоторых людей, надеющихся, что С# в конечном итоге поддержит его.

Что такое печатание ошибок?

4b9b3361

Ответ 1

Я не знаю, пришел ли кто-то из команды разработчиков С# с этим термином или если он используется в других отраслях промышленности. Мы начали использовать его при работе с неявно введенными локальными переменными (то есть "var x = whatever;" ) в С# 3.0. Довольно распространенным сценарием является желание компилятора вывести часть типа, но быть явным в отношении другой части. Например, рассмотрим следующее:

var list = new List<int>() { 10, 20, 30 };

Здесь тип "список" не указан, но указывается аргумент типа общего списка. Можно предположить, что это можно было бы вывести из инициализатора:

var list = new List<???>() { 10, 20, 30 };

Здесь??? означает "есть аргумент типа, который идет здесь: компилятор, выяснить, что он должен быть из контекста".

Мы называем это "mumble typing", потому что один человек смиренно воображает, что код читается как "var list равен новому списку hrmhmrhrm, инициализированному десятью, двадцатью тридцатью."

Мы никогда не реализовывали mumble typing, что немного неудачно, потому что это означает, что сложно составить список анонимных типов. Для этого вы можете использовать "

Ответ 2

Мне нравится эта ссылка, где объяснение находится ближе к концу страницы. В принципе, я понимаю, что идея "mumble typing" - это вывод типа без указания всего типа. Теперь у С# 4.0 есть анонимные типы, но есть ограничения, некоторые из которых объясняются в приведенной выше ссылке и здесь.

Я думаю, что главная проблема в С# по-прежнему заключается в том, что когда вам нужно называть тип, но у вас есть анонимный тип, синтаксис не позволяет вам указать, что вам нужно. Например, это не работает:

List<MyObject> myList = SomeFunctionThatReturnsThisList(someParameter);
var afterTransformation = myList.Select<MyObject, var>(o => new { x = o.x, y = o.y });

Вы не можете указать var как тип в общем. Это был несколько глупый пример, но я надеюсь, что это передает идею о том, что существуют синтаксические конструкции с анонимными типами, которые кажутся им возможными, но не являются.