我很少遇到其他程序员!
当我第一次看到令牌时,我的想法是“暗示”,因为这就是它在数学证明中的读法,但这显然不是它的意义。
因此,我该如何说或读“ =>”,如:
IEnumerable<Person> Adults = people.Where(p => p.Age > 16)
还是有一种商定的说法?
我很少遇到其他程序员!
当我第一次看到令牌时,我的想法是“暗示”,因为这就是它在数学证明中的读法,但这显然不是它的意义。
因此,我该如何说或读“ =>”,如:
IEnumerable<Person> Adults = people.Where(p => p.Age > 16)
还是有一种商定的说法?
Answers:
在阅读该运算符时,我通常会说“这样”。
在您的示例中,p => p.Age> 16读为“ P,因此p.Age大于16”。
实际上,我在linq正式发行论坛上问了这个问题,Anders Hejlsberg回答说
我通常将=>运算符读为“ becomes”或“ for which”。例如,
Func f = x => x * 2;
Func test = c => c.City ==“伦敦”;
读作“ x变成x * 2”和“ c.city等于伦敦的c”
至于“去”-这对我来说从来没有道理。'p'不会去任何地方。
在通过电话向某人读取代码的情况下,只要他们是C#程序员,我就只使用“ lambda”一词-也就是说,“ p lambda p点年龄大于十六。”
史蒂夫·杰索普(Steve Jessop)在评论中提到了转换时的“映射到”-因此以安德斯(Anders)为例:
x => x * 2;
会读
x映射到x乘以2。
在这种情况下,这似乎比“成为”更接近代码的实际意图。
从MSDN:
所有lambda表达式都使用lambda运算符=>,它被读为“ goes to”。
我见过人们说“箭头”。
我的简短回答是:“ c'lambda-of'e”。尽管我坚持使用“'lambda'c'function'e”,但我认为lambda-of是普遍的折衷方案。分析如下。
如果仅是奇怪的答案,这是一个很大的问题。除lambda表达式外,大多数翻译都具有其他含义,从而导致异国情调的解释。作为一个老的lambda表达式黑客,我只是忽略了.NET表示法,而是将其重写为lambda在我的脑海中,而希望他们为此做了几乎其他任何事情。
为了通过电话叙述代码,您希望某人能够按顺序写下代码。当然,这是一个问题,但是lambda-arrow或某些东西可能是您可以获得的最佳选择,或者也许是lambda-in,但lambda-of是最准确的。
问题在于infix的用法,以及如何在infix位置说出可以使用的东西命名整个事物以及左右部分的作用。
这可能是一个过度约束的问题!
我不会使用“ such that”,因为这意味着右手边是左手边应满足的谓词。这与谈论将左侧抽象为功能参数的右侧截然不同。(关于“所有lambda表达式”的MSDN声明只是令人反感而且不准确。)
尽管“尽力而为”可能使我们很接近,但有些事情却使他们感到愤怒。“转到”表示转换,但是并没有确切的变量c传递给c中的表达式。对函数的抽象有点难以捉摸。我可能已经习惯了这一点,但是我仍然渴望着一些强调变量抽象的东西。
由于到目前为止,在所有情况下左侧都是一个简单的标识符[但是请等待以后可能会引起混淆的扩展名],我认为对于“ c => expression”,我会读为“ c'lambda-function'expression ”或“ c'arg''function'表达式”。在最后一种情况下,我可以说诸如“ b'arg'c'arg''function'表达式”之类的东西。
最好是更清楚地引入了lambda表达式,并说类似“'arg'b'arg'c'function'表达式”之类的内容。
弄清楚如何将所有这些翻译成其他语言是学生[; <)的练习。
我仍然担心“(b,c)=>表达式”和其他尚未出现的变体。也许是“'args'b,c'function'表达式”。
经过所有这些思考之后,我注意到我正在将“ c => e”翻译为“'lambda'c'function'e”,并注意到要通过上下文理解到精确形式的映射:λc(e ),c => e,f ,其中 f(c)= e等
我希望“ goes-to”解释会流行,因为这是占主导地位的多数人第一次看到lambda表达式的地方。真可惜。一个很好的折衷方案可能是“ c'lambda- of'e”
除了获取前面的作用域(在发生lambda表达式时在正常代码行范围内的所有变量和常量都可用于该表达式的代码)之外,lambda表达式本质上是内联函数的语法糖。
生产运算符左侧的值列表(“ =>”)构成用于对该函数进行调用的堆栈框架的结构和内容。您可以说,值列表对参数声明和所传递的参数都起作用;在更常规的代码中,它们确定用于调用函数的堆栈帧的结构和内容。
结果,值“转到”表达式代码。您是说“定义堆栈框架”还是“转到”?:)
在狭义定义的布尔表达式用作过滤条件的应用中(此问题的其他答案广泛考虑了lambda表达式的主要用法),为了支持代码的意图而跳过该方法是非常合理的,这导致“为此”,简洁明了,并详细说明了代码的含义。
但是,lambda表达式并不是Linq的唯一省份,因此在此上下文之外,应使用更通用的形式“ goes to”。
因为“填充以下代码的堆栈框架”太长,无法继续说出来。我想您可以说“是/已传递给”。
显式传递的参数和捕获的变量之间的关键区别(如果我没记错的话,如果我错了,请纠正我)是前者通过引用传递,后者通过值传递。
问题的一部分是,您可以根据其结构不同大声读出它。可惜的是,它不像红宝石的|一样漂亮或没有那么综合。