以下是ClojureScript的字符串“replace”函数的原始代码块:
(defn replace
"Replaces all instance of match with replacement in s.
match/replacement can be:
string / string
pattern / (string or function of match)."
[s match replacement]
(cond
(string? match)
(.replace s (js/RegExp. (gstring/regExpEscape match) "g") replacement)
(instance? js/RegExp match)
(if (string? replacement)
(replace-all s match replacement)
(replace-all s match (replace-with replacement)))
:else (throw (str "Invalid match arg: " match))))
正如您在此行中所看到的:[s match replacement]
,此方法接受三个参数。
来自我的REPL:
user=> (replace ":c41120" ":" "")
ArityException Wrong number of args (3) passed to: core/replace clojure.lang.AFn.throwArity (AFn.java:429)
我是唯一一个认为我已经通过正确数量的论点(3)的人吗?知道为什么会失败吗?
问题,第二部分:具体具体
在我的components.cljs文件中,我有这些'要求':
(ns labrador.components
(:require [re-frame.core :as rf]
[reagent.core :refer [atom]]
[clojure.string :as s]
[labrador.helpers :as h]))
我成功使用“s / join”和“s / blank?”在这个文件中。但是当我尝试使用下面的“s / replace”时(请注意“替换”调用是在484行):
(for [roll-count order-item-roll-counts]
(let [key (key roll-count)
val (val roll-count)
code (s/replace key ":" "")]
...我收到以下错误:
Uncaught TypeError: s.replace is not a function
at clojure$string$replace (string.cljs?rel=1489020198332:48)
at components.cljs?rel=1489505254528:484
...当我明确调用replace函数时,就像这样:
code (clojure.string/replace key ":" "")]
...我仍然得到完全相同的错误,好像我还在调用“s / replace”。
我是Clojure / ClojureScript的新手,因此明显无知。
答案 0 :(得分:4)
首先,它看起来像是在Clojure REPL中运行,而不是ClojureScript,其次,您正在调用clojure.core/replace,而不是clojure.string/replace。
答案 1 :(得分:4)
我发现了错误。我试图替换一个键,而不是一个字符串。在调用替换函数之前将密钥转换为字符串后,通过使用(s/replace key ":" "")
更改(s/replace (str key) ":" "")
,一切都很顺利。
我被错误的错误消息抛弃了。被告知函数'replace'不是一个功能,当它显然是,而不是被告知函数不能执行它的工作,因为传递的数据不是一个字符串,只花了我大约三个小时的开发时间。 / p>
答案 2 :(得分:1)
当第一个args是数字而不是字符串时,我遇到了这个问题。
我认为错误信息是一种误导性的