Clojure设置字符串值
我有一个变量“testtext”。 根据另一个变量“testvalue”,它总是值1或2,需要设置为某个值。 所以,如果testvalue是1,我需要将testtext设置为“its one”。 当testvalue为2时,我需要将testtext设置为“its two”。 现在我有:Clojure设置字符串值,clojure,Clojure,我有一个变量“testtext”。 根据另一个变量“testvalue”,它总是值1或2,需要设置为某个值。 所以,如果testvalue是1,我需要将testtext设置为“its one”。 当testvalue为2时,我需要将testtext设置为“its two”。 现在我有: (cond (= testvalue 1) (var-set testtext "its one") (= testvalue 2) (var-set testtext "its
(cond
(= testvalue 1) (var-set testtext "its one")
(= testvalue 2) (var-set testtext "its two")
:else (var-set testtext "ERROR")
)
但我得到错误“字符串不能转换为clojure.lang.Var”
所以我的问题是,假设我做错了,我如何正确设置字符串值。你想要更像这样的东西:
(let [result (cond
(= testvalue 1) "its one"
(= testvalue 2) "its two"
:else "ERROR" ) ]
(println "result:" result))
在Clojure中很少使用var集。在不了解您的确切用例的情况下,我无法回答更多的细节
如果确实需要Java变量之类的东西,可以使用Clojureatom
:
(def result (atom nil))
(cond
(= testvalue 1) (reset! result "its one")
(= testvalue 2) (reset! result "its two")
:else (reset! result "ERROR" ))
(println "result:" @result))
你想要更像这样的东西:
(let [result (cond
(= testvalue 1) "its one"
(= testvalue 2) "its two"
:else "ERROR" ) ]
(println "result:" result))
在Clojure中很少使用var集。在不了解您的确切用例的情况下,我无法回答更多的细节
如果确实需要Java变量之类的东西,可以使用Clojureatom
:
(def result (atom nil))
(cond
(= testvalue 1) (reset! result "its one")
(= testvalue 2) (reset! result "its two")
:else (reset! result "ERROR" ))
(println "result:" @result))
您可能需要以下内容:
(defn func
[test-value]
(let [test-var (cond
(= test-value 1) "it's one"
(= test-value 2) "it's two"
:else "ERROR")]
test-var))
=> #'user/func
(func 1)
=> "it's one"
(func 2)
=> "it's two"
(func 3)
=> "ERROR"
let
表单用于为变量赋值。将其粘贴到函数中是返回结果的一种方便方法。您可能需要以下内容:
(defn func
[test-value]
(let [test-var (cond
(= test-value 1) "it's one"
(= test-value 2) "it's two"
:else "ERROR")]
test-var))
=> #'user/func
(func 1)
=> "it's one"
(func 2)
=> "it's two"
(func 3)
=> "ERROR"
let
表单用于为变量赋值。将其粘贴到函数中是返回结果的方便方法。在大多数上下文中,您不想修改现有的“变量”值,而是使用let
将值绑定到符号。如果我们知道更大的情况,回答起来会更容易,但正如前面提到的,是一种数据类型,您可以在一个新值中自动交换到该数据类型
我想说这是更惯用的说法,尽管不是你所问的:
(def lookup-table
{1 "its one"
2 "its two"})
(defn make-lookup [i]
(get lookup-table i "ERROR"))
(doseq [i (range 4)]
(println i "=" (make-lookup i)))
印刷品:
0 = ERROR
1 = its one
2 = its two
3 = ERROR
与其考虑如何为变量赋值,不如考虑使用该值做什么。在大多数情况下,您不想修改现有的“变量”值,而是使用let
将值绑定到符号。如果我们知道更大的情况,回答起来会更容易,但正如前面提到的,是一种数据类型,您可以在一个新值中自动交换到该数据类型
我想说这是更惯用的说法,尽管不是你所问的:
(def lookup-table
{1 "its one"
2 "its two"})
(defn make-lookup [i]
(get lookup-table i "ERROR"))
(doseq [i (range 4)]
(println i "=" (make-lookup i)))
印刷品:
0 = ERROR
1 = its one
2 = its two
3 = ERROR
与其考虑如何为变量赋值,还不如考虑该值的用途