Я обычно говорю 'таким образом что' при чтении того оператора.
В Вашем примере, p => p. Возраст> 16 чтений как "P, такой, что p. Возраст больше, чем 16".
На самом деле, я задал этот самый вопрос на официальных linq предрелизных форумах, и Anders Hejlsberg ответил путем высказывания
, я обычно читал => оператор, как "становится" или "для который". Например,
Func f = x => x * 2;
Func тестируют = c => c. Город == "Лондон";
чтения как "x становится x * 2" и "c для который c. Город равняется Лондону"
, Насколько 'переходит в' - это никогда не имело смысла мне. 'p' не идет никуда.
В случае чтения кода кому-то, скажем, по телефону, затем, пока они - такой же программист C#, я просто использовал бы слово 'лямбда' - то есть, "p лямбда p отмечает точкой больше возраст - чем шестнадцать".
В комментариях Steve Jessop упомянул 'карты' в случае преобразований - пример настолько берущего Anders:
x => x * 2;
читал бы
, x отображается на x времена 2.
, Который действительно кажется намного ближе к фактическому намерению кода, чем, 'становится' для этого случая.
Часть проблемы - то, что можно считать ее вслух по-другому в зависимости от того, как она структурирована. Это - позор, это настолько довольно или столь же не интегрируется как рубин |.
Кроме получения предыдущего объема (все переменные и константы, которые находятся в объеме для нормали кода в точке, где лямбда-выражение происходит, доступны коду выражения), лямбда-выражение является чрезвычайно синтаксическим сахаром для подставляемой функции.
список значений налево от производственного оператора (" =>") вносит структуру, и содержание стекового фрейма раньше выполняло вызов к этой функции. Вы могли сказать, что список значений вносит и объявления параметра и аргументы, которые передаются; в более стандартном коде они определяют структуру, и содержание стекового фрейма раньше выполняло вызов к функции.
В результате значения "переходят к" коду выражения. Вы сказали бы, "определяет стековый фрейм для", или "переходит в"?:)
В исключительно определенном приложении булевых выражений, используемых в качестве условий фильтра (доминирующее использование лямбда-выражений, которые экстенсивно рассматривают другие ответы на этот вопрос), очень разумно пропустить метод в пользу намерения кода, и это приводит к "для который", будучи столь же сжатым и говоря больше о значении кода.
Однако лямбда-выражения не являются единственной провинцией Linq, и за пределами этого контекста более общая форма "переходит в", должен использоваться.
<час>, поскольку "заполняет стековый фрейм следующего кода", является слишком длинным, чтобы продолжать говорить это. Я предполагаю, что Вы могли сказать, "передается".
А решающее различие между явно переданными параметрами и полученными переменными (если я помню правильно - исправляют меня, если я неправ) - то, что первый передается ссылкой и последним значением.
Я не думал он об очень, но я просто succintly говорю. Это коротко и кратко, и подразумевает, что переменная передается выражение. Я предполагаю, что это могло быть перепутано с цифрой 2 ("два"), но я склонен высказываться "для" больше симпатии "ta" при разговоре. Никто (кто знает лямбды, по крайней мере) никогда не говорил мне, что они думали он неоднозначный...
// "Func f equals x to x times two"
Func f = x=> x * 2;
// "Func test equals c to c dot City equals London"
Func test = c => c.City == "London"
Я использую, "переходит в", потому что книга LINQ сказала мне:)
Мой короткий ответ: "c 'лямбда -' e". Хотя я цепляюсь "за 'лямбду' c 'функция' e", я думаю, что лямбда - является вселенским компромиссом. Анализ следует.
Это - большой вопрос если только для причудливых ответов. Большинство переводов имеет другие значения, чем для лямбда-выражений, ведя к экзотическим интерпретациям. Как старый хакер лямбда-выражения, я просто игнорирую нотацию.NET и переписываю ее как лямбду в моей голове при жалел, что они не сделали почти ничто больше для этого.
<час>Для повествования кода по телефону, Вы хотите, чтобы кто-то был в состоянии записать код в последовательности. Это - проблема, конечно, но стрелка лямбды или что-то являются, вероятно, лучшими, можно добраться, или возможно лямбда - в, но лямбда - является самой точной.
проблемой является инфиксное использование и как назвать все это и роль левых и правых частей с чем-то, что работает, когда говорится в инфиксном месте.
Это может быть сверхограниченной проблемой!
<час>я не использовал бы "таким образом, что", потому что это подразумевает, что правая сторона является предикатом, который должна удовлетворить левая сторона. Это очень отличается от разговора о правой стороне, с которой левая сторона была абстрагирована как функциональный параметр. (Оператор MSDN обо "Всех лямбда-выражениях" является просто оскорбительным, а также неточным.)
Что-то терзается о, "переходит в", хотя это может быть настолько близко, как мы можем добраться. "Переходит в", подразумевает преобразование, но нет точно некоторой переменной c, который переходит к выражению в c. Абстракция к функции немного неуловима. Я мог привыкнуть к этому, но я все еще тоскую по чему-то, что подчеркивает абстракцию переменной.
, Так как левая сторона всегда является простым идентификатором в случаях, используемых до сих пор [но ожидайте расширений, которые могут перепутать это позже], я думаю для "c => выражение", я считал бы "c 'функциональное лямбдой' выражение"' или даже "c выражение 'функции' 'аргумента'". В последнем случае я мог тогда сказать вещи как "b 'аргумент' c выражение 'функции' 'аргумента'".
могло бы быть лучше сделать его еще более ясным, что лямбда-выражение представляется, и скажите что-то как "'аргумент' b 'аргумент' c 'функциональное' выражение".
Выяснение, как перевести все это в другие языки, является осуществлением для студента [; <).
я все еще волнуюсь о" (b, c) => выражение" и другие варианты, которые могут возникнуть, если они уже не имеют. Возможно, "'args' b, c 'функциональное' выражение".
<час>После всего этого размышления, я замечаю, что возвращаюсь к переводу "c => e" как "'лямбда' c 'функция' e" и замечающий, что отображение на точную форму должно быть понято под контекстом: О» c (e), c => e, f , где f (c) = e, и т.д.
я ожидаю, что" переходит - к "объяснению, будет преобладать просто, потому что это - то, куда доминирующее большинство собирается видеть лямбда-выражения впервые. Это - жалость. Хороший компромисс мог бы быть" c ' лямбда - [1 114]' e "
Я всегда называл его "wang оператор":-)
"p wang возраст p, больше, чем 16"
От Eric Lippert:
я лично сказал бы, что c => c+1 как "видят, идет для наблюдения плюс один". Некоторые изменения, которые я услышал:
Для проекции, (Клиент c) => c. Имя: "клиент видит, становится, посмотрите точечное имя"
Для предиката, (Клиент c) => c. Возраст> 21: "клиент видит таким образом, которые видят, что точечный возраст больше, чем двадцать один"
От MSDN:
Все лямбда-выражения используют оператор лямбды =>, который читается, поскольку "переходит в".
Как насчет «карт к»? Это как сжатыми, так и, возможно, более технически точными (т. Е. Нет предположения о состоянии состояния, как с «идет« или «становится», не измеряется слиянием набора с его характерной функцией, как с «такими, как» или «для которого») другие альтернативы. Хотя, если есть уже стандарт, поскольку страница MSDN, кажется, подразумевается, может быть, вы должны просто пойти с этим (хотя бы для C # код).
"Карты до" - мое любимое произношение. Говоря математически, функция "сопоставляет" свои аргументы с возвращаемым значением (можно даже назвать функцию "mapping"), поэтому мне имеет смысл использовать эту терминологию в программировании, тем более, что функциональное программирование (особенно лямбда-вычисление) очень близко к математике. Кроме того, она более нейтральна, чем "становится", "идет к" и т.д., поскольку не предполагает изменения состояния, как уже упоминалось, без контекста.