首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从匿名函数调用匿名函数

从匿名函数调用匿名函数
EN

Stack Overflow用户
提问于 2012-11-06 19:10:47
回答 2查看 1.2K关注 0票数 3

我想调用一个匿名函数,它不使用另一个匿名函数的速记符号。

执行以下操作不起作用,因为返回了最后一个评估结果:

代码语言:javascript
复制
user> ((fn [x] (fn [y] (inc y)) x) 3)
3

现在,我想有一种方法从外部调用内部匿名函数。

我成功地做到了这一点,但看起来很复杂:

代码语言:javascript
复制
user> ((fn [x] (let [f (fn [y] (inc y))] (f x))) 3)
4     ;; good, 4 is the result I want here

有更简单的方法来嵌套匿名函数吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-06 19:23:13

让我们打破第一条线:

代码语言:javascript
复制
((fn [x]
   (fn [y] (inc y))  ; construct an anonymous function
   x)                ; return the outer parameter
 3)

请注意,从来没有使用内部函数。

你似乎想做的事:

代码语言:javascript
复制
((fn [x]
   ((fn [y] (inc y)) x))
 3)
票数 8
EN

Stack Overflow用户

发布于 2012-11-06 23:21:20

我强烈建议使用let表单来提高代码的清晰度。

代码语言:javascript
复制
(let [f (fn [y] (inc y))
      g (fn [x] (f x))]
  (g 3))

我甚至还有另一个职能来接受前者。

代码语言:javascript
复制
(let [f (fn [y] (inc y))
      g (fn [h x] (h x))]
  (g f 3))

甚至如下所示:

代码语言:javascript
复制
(let [f (fn [y] (inc y))
      g (fn [h x] (h x))
      gf (partial g f)]
  (gf 3))

它使阅读和理解功能更加容易。即使有了let,我也不会停在这里,去做另一个更好的函数。

经过一番思考,我认为当f这样做时,没有必要定义一个单arg函数inc。另外,使用读者的匿名函数文字可能会使人感到不知所措,而let表单变成:

代码语言:javascript
复制
(let [f inc
      g #(% %2)
      gf (partial g f)]
  (gf 3))

但我想得越多,我就越不了解这个问题。

你能描述一下你真正想要达到的目标吗?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13257735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档