当前位置: 首页 > 知识库问答 >
问题:

需要帮助在字符串问题中替换名称(clojure)

仲孙磊
2023-03-14

我正在为Clojure做一个练习题,应该很简单,但实际上却让我很头疼,问题描述如下:

two-fer或2-fer是二对一的缩写。一个代表你,一个代表我。给定一个名称,返回一个带有消息的字符串:“One for X, one for me。”其中X是给定的名称。但是,如果缺少名称,请返回字符串:“One for you, one for me。”

这就是我所尝试的:

(defn two-fer [& name]
  (if (nil? name)
    "One for you, one for me."
    (str "One for " name ", one for me."
  )
)

然而,我最终得到了以下单元测试输出:

预期:(=“一个给鲍勃,一个给我。”(双弗/双弗“鲍勃”))实际:(不是(=“一个给鲍勃,一个给我。”“一个给(“鲍勃”),一个给我。”))

lein测试:只有两个-fer-test/name-alice-test

(name alice test)(two\u fer\u test.clj:9)应为失败:(=“一个给alice,一个给我。”(两个“爱丽丝”)实际:(不是(“一个给爱丽丝,一个给我。”“一个给(“爱丽丝”),一个给我。”)

应为(两个fer测试)(两个fer clj:5)中的错误:(=“一个给你,一个给我。”(两个fer/两个fer))实际值:java。lang.ClassCastException:类java。无法将lang.字符串转换为clojure类。lang.IFn(java.lang.String位于加载器“bootstrap”的模块java.base中;clojure.lang.IFn位于加载器“app”的未命名模块中)

我也尝试过:

(defn two-fer [& name]
  (str "One for " (if (nil? name) "you" name) ", one for me.")
)
(defn two-fer [& name]
  (if (nil? name)
    "One for you, one for me."
    (eval `(str "One for " ~name ", one for me.")
  )
)
(defn two-fer [& name]
  (if nil? name)
    "One for you, one for me."
    (clojure.string/replace (str "One for " name ", one for me.") #"\\(?\\"\\)" ""))
  )
)

共有3个答案

逑翰翮
2023-03-14
(defn two-fer [& names]
  (str "One for " (if (empty? names) "you" (first names)) ", and one for me."))

;; or using `or` (old lisp style, not Clojure's best practice):
(defn two-fer [& names]
  (str "One for " (or (first names) "you") ", and one for me."))
端木弘方
2023-03-14

问题是

您可能需要这样的东西:

(defn two-fer
  [& args]
  (let [name (if (empty? args)
               "you"
               (first args))]
    (str "One for " name ", one for me.")))

有结果

(two-fer "Bob")  => "One for Bob, one for me."
(two-fer)        => "One for you, one for me."

您可能也对这个留档源列表感兴趣。

裘光启
2023-03-14

您可以编写multi-arity函数:

(defn two-fer
  ([] (two-fer "you"))
  ([name] (str "One for " name ", one for me.")))
 类似资料:
  • 我有一个将sql查询读取为字符串的方法,需要将所有“\”替换为“\”。这样做是为了防止\n和\r被处理为输出中的换行符。 样本输入 (\nSELECT\na.population_id\n,a.empi_id\n\r,a.encounter_id\n,SPLIT_PART(MIN(a.service_date||'|'|| a.norm_numeric_value),'|',2)::FLOAT为e

  • 我是C新手,需要解析字符串“var1=bob” 我在C语法方面遇到了一些问题,并且无法成功地循环输入并通过解析它来提取“bob”和“smith”。我一直在尝试使用strtok(),但没有成功。 如果有人能在这里帮助我,我将不胜感激。 非常感谢。

  • 问题内容: 我正在尝试通过覆盖ImplicitNamingStrategyJpaCompliantImpl类中的方法defineForeignKeyName来为外键列名添加下划线,但是不起作用。下面是我创建的类, 因此,除了defineForeignKeyName方法外,其他方法也可以按预期工作,例如为表添加复数名称和下划线。当我通过代码调试时,我可以看到该控件进入用于外键列的underlyFor

  • 我已经从Godaddy购买了SSL,我的网站托管在AWS中。我想在AWS上设置SSL。我绑定使用证书管理器导入证书。它问了我三件事: 证书体*--在这里,我从Godaddy获得了。crt文件内容 证书私钥*--这里我仍然困惑需要输入什么。请帮我做这个 证书链--在这里我输入了sf_bundle-g2-g1.crt代码。 请帮助我启用AWS中的SSL。提前致谢

  • 问题内容: 我需要用%符号替换字符串中的空格,但是我遇到了一些问题,我尝试的是: 但这给我替换功能一个错误。 然后: 但是它仍然给我替换函数错误。 我尝试使用unicode符号: 但是它仍然会给出错误。 有一个简单的方法吗? 问题答案: 是您想要的方法。 更换 与 我建议您在Java中使用进行编码。

  • 评估项目': tflite'时出现问题。 没有方法的签名:build _ 29 ou 9 K6 cal 0 PML 6 qvuo 3 exmb 2 . Android()适用于参数类型:(build _ 29 ou 9 K6 cal 0 PML 6 qvuo 3 exmb 2 $ _ run _ closure 2)值:[build _ 29 ou 9 K6 cal 0 PML 6 qvuo 3