if-statement - 如果出现错误的类型,防止运行时错误

标签 if-statement error-handling clojure

我目前正在尝试建立一个简单的函数,该函数读取整数列表并按如下所示返回每个整数的平方:

(defn square-seq
  [s]
  (if (string? s)
    (s = nil)
    (map #(* % %) s)))

但是我希望代码能够处理字符串输入,并且只需将它们默认为数字值即可防止ClassCastException。如我
(square-seq ["Hello" 2 3])

那么返回值为:
(1 4 9) or (nil)

不知道我是想得太多还是只是太笨了,但我不知道如何让它在我的生命中发挥作用,任何帮助将不胜感激!

最佳答案

您正在顶层检查字符串,因此很可能永远不会到达该分支。您必须检查它实际触发错误的位置(在anon-fn内部)。

因此,我首先要编写一个函数,执行“安全平方”,您的square-seq可以调用该函数。

(defn square
  [x]
  (if (string? x)
    x
    (* x x)))

(defn square-seq
  [xs]
  (map square xs))

(square-seq ["Hello" 42])
; ⇒ ("Hello" 1764)

关于if-statement - 如果出现错误的类型,防止运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59713664/

相关文章:

ruby-on-rails - 显示不同Rails 500消息的自定义消息的最佳方法?

mysql - 从 cascalog 写入 MySQL 不起作用。如何调试这个?

clojure - 类路径冲突 : org. clojure/clojure 1.7.0 版已加载,未加载 1.8.0 版

Python (3.2.3) If Or 语句语法错误

r - 避免来自 ifelse() 的 FALSE 部分的警告

ios - 应用程序 didFinishLaunchingWithOptions 忽略 if 语句

javascript - 将信息添加到现有错误?

c - 如果语句不相等,那是什么意思? (C)

error-handling - @@ ERROR <> 0在触发器中

clojure - 函数调用->线程宏