Clojure - 从另一个方法调用一个方法,两个方法都在同一个协议/记录中

时间:2015-11-16 07:46:22

标签: clojure

协议有两种方法:

(defprotocol ITimeInterop
  (parse-int [this str])
  (stringify-time [this host-time]))

我在parse-int点击stringify-time

(defrecord CljTime []
  ITimeInterop
  (parse-int [_ str]
    (Integer. (re-find #"[0-9]*" str)))
  (stringify-time [the-obj host-time]
    (let [specific-format (SimpleDateFormat. "MM dd yyyy HH:mm:ss")
          as-str (.format specific-format host-time)
          [month day-of-month year time-str] (str/split as-str #" ")
          month-as-idx (dec (parse-int the-obj month))]
      {})))

我得到的错误消息是'java.lang.RuntimeException:无法在此上下文中解析符号:parse-int'。

我应该如何从parse-int致电stringify-time

也许在parse-int前面使用一个点会有帮助吗?

回答很遗憾,我没有在问题中显示名称空间。使用点似乎可以工作,但更好的解决方案是:require协议的命名空间:as i然后使用:(i/parse-int the-obj month)进行调用。

1 个答案:

答案 0 :(得分:1)

只要您提供parse-int作为第一个参数,就stringify-time调用this应该没问题,这正是您所做的。但是在您提供的代码中,我希望错误消息“无法解析month”。

我建议你先仔细检查一下你的问题。