boa*_*oaz 2 performance clojure
我正在学习Clojure。作为该:require
过程的一部分,有一个选项可:refer
用于特定方法或所有方法。
或使用:as
,然后选择所需的方法。
我想我明白了2个选项之间的差异,也看到了文档在这里,上面写着:
:as将符号作为其参数,并使该符号成为当前名称空间中lib名称空间的别名。
:refer接受要从名称空间引用的符号列表,或:all关键字以引入所有公共变量。
但是我仍然不确定:
什么时候应该使用一个选项而不是另一个?
是否有性能差异的两个选项之间?(我的想法是说没有,因为Compillar会优化这两种选择
(我还做了两个使用小程序core.asyc
,一个使用:as
和一个使用:refer
。运行两个程序所需的时间几乎相同。
我几乎总是这样使用:as
:
(ns demo.core
(:require
[clojure.string :as str] ))
(println (str/join ["hello" "there"]))
Run Code Online (Sandbox Code Playgroud)
这使读者可以看到join
属于str
(名称空间别名),并且可以轻松地看到join
解析为clojure.string/join
。
考虑替代方案:
(ns demo.core
(:require
[clojure.string :refer [join] ))
<snip>
...397 lines of other code...
</snip>
(println (join ["hello" "there"]))
Run Code Online (Sandbox Code Playgroud)
这里join
看起来像中定义的局部函数demo.core
,读者可能需要一段时间才能弄清它的来源。他们仍然可以通过在ns
声明中查找来追踪来源,但是除非它是一个非常常用的功能,否则大多数人都同意,在读取您未编写的代码时,名称空间别名技术更容易/更快捷。
在执行过程中,编译器会将两种形式都转换为相同的机器代码,因此两者之间没有区别。
归档时间: |
|
查看次数: |
108 次 |
最近记录: |