Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure设置字符串值_Clojure - Fatal编程技术网

Clojure设置字符串值

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

我有一个变量“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 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变量之类的东西,可以使用Clojure
atom

 (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变量之类的东西,可以使用Clojure
atom

 (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
与其考虑如何为变量赋值,还不如考虑该值的用途