【发布时间】:2026-01-17 00:20:02
【问题描述】:
我正在通过 Exercism 学习 clojure,但在完成千层面问题的最后一部分时遇到了一些麻烦。
指令如下 - 定义带两个参数的总时间函数:第一个参数是您添加到千层面的层数,第二个参数是千层面在烤箱中的分钟数。该函数应返回您烹饪千层面总共花了多少分钟,即准备时间(以分钟为单位)与千层面在烤箱中花费的时间(以分钟为单位)的总和。
这是给我带来麻烦的代码:
(defn prep-time [num-layers]
(* times-two num-layers))
(def sum (prep-time times-two))
(defn total-time [num-layers actual-time]
(def test1 (prep-time num-layers))
(+ test1 actual-time))
(def finished (total-time test1 prep-time))
我收到一条错误消息:
`(defn prep-time [num-layers]
11: (* times-two num-layers))
^--sci.impl.fns$fun$arity_1__1213 cannot be cast to java.lang.Number`
为什么我会收到这个错误,这意味着什么?
【问题讨论】:
-
在顶层使用
def是不行的(它会修改命名空间) - 它是test1内的total-time。改为查看let;在另一个defn之外再次依赖(def test1 ...)也很糟糕。您还可以改进问题并说明您面临的实际问题吗?你得到一个例外或一些断言吗? -
堆栈溢出问题应该是关于您遇到的特定技术问题。 “解决这个任务”太宽泛了,不能在这里讨论。诚然,您的代码中存在特定的技术问题,但您的工作是找出其中的一个,构建一个 minimal reproducible example 来重现它,并询问这个问题。
-
那是我的错,谢谢,下次一定要更清楚地澄清我的问题。但我面临的问题是,当我运行我的代码时,我会收到一条错误消息 -
(defn prep-time [num-layers] 11: (* times-two num-layers)) ^--- sci.impl.fns$fun$arity_1__1213 cannot be cast to java.lang.Number不确定我为什么会收到错误消息。
标签: clojure