无法解决clojure.string / replace“不是函数”错误

时间:2017-03-13 23:31:32

标签: replace clojurescript

以下是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的新手,因此明显无知。

3 个答案:

答案 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是数字而不是字符串时,我遇到了这个问题。

我认为错误信息是一种误导性的