【发布时间】:2016-05-27 06:12:24
【问题描述】:
当我阅读文档或示例时,我经常会想到可以将匿名函数分配给变量的想法。为什么我真的会这样做,而不仅仅是定义一个新函数?
一些例子:
Clojure/Lisp
(def add2
(fn [a] (+ 2 a))
(add2 4) ;; => 6
Python
add2 = lambda e: e + 2
add2(3) # => 5
斯卡拉
val add2 = (x: Int) => x + 2
add2(5) /* => 7 */
显然,这些只是一些微不足道的示例,但在生产代码中,我通常认为匿名函数是 one off 特定用例所需的函数(想想更高种类的类型等)。
谁能解释我为什么要为一个变量分配一个匿名函数?它是运行时/编译时的事情吗?是否有某些性能特征使其有利?
【问题讨论】:
-
这实际上主要是基于意见/风格问题。但是在 Python 中使用像这样的 lambdas 除了使调试更加困难之外没有其他“目的”。
-
当我需要
key函数(例如sort)并且我想在我使用它的同一行中定义函数时,我有时会为 lambda 函数指定一个名称参数感觉太简洁了,但定义一个常规函数感觉太冗长了。 -
我今天早上确实这样做了。我正在测试 2 个具有不同实现但应该具有相同输入/输出的高阶函数。我将传入的函数绑定在
let中,然后在正文中使用它。我可以将它定义为一个具体的函数,但这对于快速测试来说已经足够了。
标签: python scala clojure anonymous-function