代码之家  ›  专栏  ›  技术社区  ›  Christopher Edwards

Net中lambda表达式中使用的“=>”如何发音

  •  156
  • Christopher Edwards  · 技术社区  · 16 年前

    我很少见到其他程序员!

    那么我该如何说或读“=>”,如:-

    IEnumerable<Person> Adults = people.Where(p => p.Age > 16)
    

    或者甚至有一种约定的表达方式?

    15 回复  |  直到 6 年前
        1
  •  150
  •   Erik Forbes    11 年前

    我在读那个运算符时通常会说“这样”。

    在您的示例中,p=>p、 年龄>16读作“P,因此P.年龄大于16岁。”

    我通常阅读=>运算符为“成为”或“为其”。例如

    Func test=c=>c、 城市==“伦敦”;
    读作“x变成x*2”和“c,其中c.城市等于伦敦”

    至于“去”,这对我来说从来没有意义p'哪儿也去不了。

    在通过电话向某人读代码的情况下,只要他们是C#程序员,我就用“lambda”这个词——也就是说,“p lambda p dot age大于16。”

    x => x * 2;
    

    x映射到x乘以2。

    这看起来确实比本例中的“变成”更接近代码的实际意图。

        2
  •  60
  •   Tim Cooper    13 年前

    从…起 MSDN :

    运算符=>,它被解读为“去”

        3
  •  19
  •   Gulzar Nazim    16 年前

    Reading Code Over the Telephone

    我个人会说c=>c+1为“见即见加一”。我听到的一些变化:

        4
  •  15
  •   Aidos    16 年前

    我一直称之为“王操作员”:-)

    “p王p大于16岁的年龄”

        5
  •  7
  •   Brian    16 年前

        6
  •  7
  •   CodeChef    16 年前

    我使用“goes to”是因为LINQ的书告诉我:)

        7
  •  5
  •   Max Strini    15 年前

    “地图到”怎么样?与其他备选方案相比,它既简洁又可以说在技术上更准确(即,没有关于“去”或“变成”的状态变化的建议,没有集合与其特征函数的合并,比如“这样那样”或“为了什么”)。虽然如果已经有了MSDN页面所暗示的标准,也许你应该遵循它(至少对于C#代码)。

        8
  •  3
  •   Will Vousden    15 年前

    “Maps to”是我最喜欢的发音。从数学上讲,函数将其参数“映射”到其返回值(人们甚至可以称函数为“映射”),因此在编程中使用这个术语对我来说是有意义的,特别是函数编程(特别是lambda演算)非常接近数学。它也比“变成”、“转到”等更中性,因为它并不意味着状态的改变,正如contextfree所提到的。

        9
  •  2
  •   Mark Brackett Achilles Ram Nakirekanti    16 年前

    我没有想太多,但我只是简明扼要地说“去”。它简短明了,并暗示变量已传递

    // "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"
    
        10
  •  2
  •   orcmid    16 年前

    我的简短回答是:“c’lambda of’e”。虽然我坚持使用“lambda'c'函数'e”,但我认为lambda是一种普世的妥协。分析如下。


    对于通过电话讲述代码,您希望有人能够按顺序写下代码。这当然是一个问题,但lambda arrow或其他东西可能是你能得到的最好的,或者可能是lambda in,但lambda of是最准确的。

    这可能是一个过度约束的问题!


    我不会使用“这样那样”,因为这意味着右侧是左侧应该满足的谓词。这与讨论右手边非常不同,左手边被抽象为一个函数参数。(MSDN关于“所有lambda表达式”的声明既无礼又不准确。)

    由于在目前使用的情况下,左侧始终是一个简单的标识符[但等待稍后可能会混淆这一点的扩展],因此我认为对于“c=>表达式”,我将阅读“c'lambda function'expression”甚至“c'arg''function'expression”。在最后一个例子中,我可以说“b'arg'c'arg''function'expression”。

    最好更清楚地说明正在引入lambda表达式,并使用类似于“'arg'b'arg'c'function'expression”的语句。

    找出如何将所有这些翻译成其他语言是学生的一项练习[;<]。


    在所有这些思考之后,我注意到我开始将“c=>e”翻译为“lambda'c'函数'e”,并注意到到到精确形式的映射是由上下文理解的:c(e),c=>e、 f 哪里 f(c)=e等。

    我希望“去”的解释会占上风,因为这是占主导地位的大多数人第一次看到lambda表达式。真遗憾。一个好的妥协可能是“c” 兰姆达 “e”

        11
  •  2
  •   Jonesopolis    10 年前

    如果将lambda表达式想象为匿名方法,“goes to”就足够有意义了。

    (n => n == String.Empty)
    

    n“转到”表达式n==String.Empty。

    它转到匿名方法,因此您不必转到代码中的方法!

    老实说,我不喜欢在脑子里用“去”这个词,但我看到其他人说这看起来很奇怪,我想我应该澄清一下。

        12
  •  2
  •   Peter Wone    10 年前

    生产运算符(“=>”)左侧的值列表提供用于调用此函数的堆栈帧的结构和内容。可以说,值列表提供了参数声明和传递的参数;在更传统的代码中,它们确定用于调用函数的堆栈帧的结构和内容。

    结果,这些值“转到”表达式代码。您更愿意说“定义堆栈帧”还是“转到”?:)

    在用作过滤条件的布尔表达式的狭义定义应用中(该问题的其他答案广泛考虑的lambda表达式的主要用途),为了代码的目的而跳过该方法是非常合理的,这会导致“for which”同样简洁,并更多地说明代码的含义。

    然而,lambda表达式并不是Linq的唯一领域,在此上下文之外,应该使用更一般的形式“goes to”。


    因为“填充以下代码的堆栈框架”太长,不能一直这么说。我想你可以说“是/是传递给”。

    显式传递的参数和捕获的变量(如果我没记错,请纠正我的错误)之间的一个关键区别是前者通过引用传递,后者通过值传递。

        13
  •  1
  •   Tad Donaghe    16 年前

        14
  •  1
  •   Pharylon    11 年前

    在Ruby中,这个sybmol被称为“hashrocket”,我听说C#程序员也使用这个术语(尽管这样做是错误的)。

        15
  •  0
  •   Hossein Narimani Rad NetMage    9 年前

    我的两分钱:

    s => s.Age > 12 && s.Age < 20
    

    “参数为s的Lambda表达式为{ return s.Age > 12 && s.Age < 20; }"

    delegate(Student s) { return s.Age > 12 && s.Age < 20; };
    

    =>只是一个快捷方式,因此您不必使用delegate关键字并包含类型信息,因为它可以由编译器推断。

        16
  •  0
  •   Arthur    4 年前

    我的任期=>如应用于示例所示,结果如下所示

    'result = s => s.Age > 12 && s.Age < 20'
    

    'result = x => x * 2'
    

    x,其中x乘以2

    'result = c => c.City == "London"'
    

    c其中c.city相当于“伦敦”

    'result = n => n == String.Empty'
    

    其中n是一个空字符串