首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Clojure转换javascript函数

使用Clojure转换javascript函数
EN

Stack Overflow用户
提问于 2018-08-25 03:22:38
回答 1查看 202关注 0票数 1

我是Lisp/Functional/Clojure领域的新手,我有一个JS函数:

代码语言:javascript
复制
function buildString(someInteger) {

   var question = "Initial text";

   if (someInteger == 1) {
     question += " put this string ";
   } else if(someInteger == 2) {
     question +=  " oh! another string ";
   } else if(someInteger == 3) {
     question +=  " guess what? ";
   }
   return question;
  }

将其重写为Clojure函数的好方法是什么?我已经有一些使用"cond“Clojure宏的代码,但我不确定不可变的字符串”问题“:

代码语言:javascript
复制
(defn build-string [some-integer]
  (let [question "Initial text"]
    (cond
      (= some-integer 1) (str question "Add string one")
      (= some-integer 2) (str question "Add string two")
      (= some-integer 3) (str question "Add string three"))))
EN

回答 1

Stack Overflow用户

发布于 2018-08-25 04:40:55

如果你只有一些“等号”的检查,我会选择地图。例如。

代码语言:javascript
复制
(str "Initial text" ({1 "Add string one" 2 "Add string two" 3 "Add string three"} some-integer))

或者直接使用condp。例如。

代码语言:javascript
复制
(defn build-string  
  [some-integer]
  (str "Initial text"
       (condp = some-integer
         1 "Add string one"
         2 "Add string two"
         3 "Add string three"
         nil)))

(map build-string (range 4))
; => ("Initial text" "Initial textAdd string one" "Initial textAdd string two" "Initial textAdd string three")

我认为这里的关键点是消除重复;不仅消除代码的“长度”,还消除代码的“宽度”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52010587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档