gpt4 book ai didi

unit-testing - 为符号 `with-redefs` (Clojure) 返回连续不同的值

转载 作者:行者123 更新时间:2023-12-04 05:14:35 27 4
gpt4 key购买 nike

我希望使用 with-redefs模拟来自 STDIN 的用户输入。

首先,我正在测试不正确的输入,它应该重新询问用户输入。然后,应该给出正确的输入。

有没有办法使用with-redefs将连续不同的值绑定(bind)到给定的符号?

我正在尝试获得此功能:

(with-redefs [read-line (fn [] "HI")
read-line (fn [] "OK")]
(do (println (read-line)) ;; -> "HI"
(println (read-line)))) ;; -> "OK"

最佳答案

不是特别的,但你总是可以在某些状态下'let-over-lambda'!

(let [a (atom ["a" "b"])]
(defn f []
(let [r (first @a)]
(swap! a rest)
r)))

(f) ;; "a"
(f) ;; "b"
(f) ;; nil

在您的特定情况下,拥有一个生成“有状态”函数的函数是有意义的,所以一个完整的例子是:
(defn maker [l]
(let [a (atom l)]
(fn []
(let [r (first @a)]
(swap! a rest)
r))))

(with-redefs [read-line (maker ["HI" "OK"])]
(do (println (read-line)) ;; -> "HI"
(println (read-line)))) ;; -> "OK"

关于unit-testing - 为符号 `with-redefs` (Clojure) 返回连续不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48374319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com