Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何超载”;获得;在Clojure_Clojure - Fatal编程技术网

“如何超载”;获得;在Clojure

“如何超载”;获得;在Clojure,clojure,Clojure,我希望在我自己的函数中使用clojure“get”关键字。如何防止clojure使用标准库中定义的“get”?如前所述,这不一定是个好主意,但您可以这样做: user=> (ns your.name.space (:refer-clojure :exclude [get])) nil your.name.space=> (defn get [] "something") #'your.name.space/get your.name.space=> 除了从集合中获取值之

我希望在我自己的函数中使用clojure“get”关键字。如何防止clojure使用标准库中定义的“get”?

如前所述,这不一定是个好主意,但您可以这样做:

user=> (ns your.name.space
  (:refer-clojure :exclude [get]))
nil
your.name.space=> (defn get [] "something")
#'your.name.space/get
your.name.space=> 

除了从集合中获取值之外,我不建议使用get,因为任何阅读您的代码的人都希望它这样做

如果你不想这样做,沃丁的答案就是你想要的


如果你真的想按照你的标题“重载”get,也就是说,让标准get函数与你自己的集合类型一起工作-只要确保你的集合实现了ILookup、Map、,或者IPersistentSet,您可以提供自己的get/valAt方法。

试图覆盖语言关键字是一个非常糟糕的主意。是的,我知道这是一个糟糕的主意,但“get”没有任何易于记住的同义词。我想即使是找东西也要抓取/装载/取回,还有很多人。更妙的是,像get这样的词怎么样?是的,没错,但是“get”听起来最自然。谢谢你的建议。名称空间的全部意义不就是允许重用“好”的名称吗?尽管混淆代码的读者是一个非常值得关注的问题,但是为什么不使用clojure的别名功能,并为自定义名称空间添加一个短前缀呢?my/get(在适当的上下文中使用比my更有意义的内容)。