【问题标题】:Filter type String in ClojureClojure 中的过滤器类型字符串
【发布时间】:2012-05-13 19:58:43
【问题描述】:

目前我正在尝试学习 Clojure,我想编写一个具有可变数量参数的函数。这个函数应该过滤每个输入来检查它是否是一个字符串。如果是这样,则应返回字符串类型的每个输入..

Clojure 对我来说很难,而且思维方式不同,但我在这里的方向是否正确.. 我似乎无法解决它:

(defn returnString [& y]
(if (next y)
(filter (fn [x] (= (type x) "java.lang.String"))y)
(recur (next x))))

谢谢!

【问题讨论】:

    标签: filter clojure


    【解决方案1】:

    有一个名为 string? 的函数,如果参数是字符串则返回 true,否则返回 false。

    => (string? "hi")
    true
    => (string? 100)
    false
    => (string? ["a" "b" "c"])
    false
    

    因此,考虑到这一点,您的函数将如下所示:

    (defn return-strings [& vals]
      (filter string? vals))
    

    过滤器函数将返回一个值序列(本质上是一个集合),因此在这种情况下,您无需担心自定义函数中的递归(即使用recur)。


    您用来确定什么是字符串的匿名函数非常接近正确。如果您通过在 REPL 中输入 (source string?) 来查看 string? 的源代码,您会看到:

    (fn [x] (instance? String x))
    

    不过,您采用的方法也可以。您只需要指定 String 类而不是您提供的字符串值。 (注意,您可以省略 java.lang,因为该包会自动包含在 Java 中。)

    (fn [x] (= (type x) String))
    

    【讨论】:

      猜你喜欢
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多