首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译后不需要的匿名函数

编译后不需要的匿名函数
EN

Stack Overflow用户
提问于 2015-08-05 20:32:35
回答 2查看 44关注 0票数 0

我正在用ClojureScript编写一个带有纯函数的接口层,但是在编译之后得到了不想要的结果。简单的参数化函数可以很好地工作。示例:

代码语言:javascript
复制
(defn rev [s]
  (.. s (split "") (reverse) (join "")))

..。将成功生成function rev(s){return s.split("").reverse().join(""); },而使用更复杂的参数(如[s a & [b]] )或参数多态时,它会生成一个匿名函数:

代码语言:javascript
复制
(defn substr
  ([s a b]
    (.. s (substr a b)))
  ([s a]
    (.. s (substr a))))

..。生成:function (s,a,b){ switch(arguments.length){ case 2: return substr__2.call(this,s,a); case 3: return substr__3.call(this,s,a,b); } throw(new Error('Invalid arity: ' + arguments.length)); }

相反,它甚至无法与(def substr (fn ...一起工作。如何强制使用defn命名函数

EN

回答 2

Stack Overflow用户

发布于 2015-08-06 18:47:22

如果要从javascript调用函数,请在函数上使用^:export

代码语言:javascript
复制
(defn ^:export substr
  ([s a b]
    (.. s (substr a b)))
  ([s a]
    (.. s (substr a))))

然后,编译器应该生成该名称,以便您可以从javascript调用它。

票数 1
EN

Stack Overflow用户

发布于 2015-08-06 02:15:40

我是通过将函数导出到JavaScript的Window全局对象来实现的:

代码语言:javascript
复制
(aset js/window "substr" stdlib.string/substr)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31832639

复制
相关文章

相似问题

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