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中的first获取默认值?_Clojure - Fatal编程技术网

如何从Clojure中的first获取默认值?

如何从Clojure中的first获取默认值?,clojure,Clojure,>1 first[]返回NullPointerException 如何使first[]返回默认值,例如0,而不是nil?您可以使用或绕过nil值 因为在Clojure中,nil被视为假值。您可以使用或绕过nil值 因为在Clojure中,nil被视为一个虚假的值。您应该如何在设计中明确定义功能对象 因为您需要一个功能:给定一个集合coll提取第一个元素或默认值为0,那么您应该有一个单独的函数用于此 e、 g 定义第一个或零[coll] if seq coll 第一列0 尽管编写起来有点麻烦,而且

>1 first[]返回NullPointerException

如何使first[]返回默认值,例如0,而不是nil?

您可以使用或绕过nil值

因为在Clojure中,nil被视为假值。

您可以使用或绕过nil值


因为在Clojure中,nil被视为一个虚假的值。

您应该如何在设计中明确定义功能对象

因为您需要一个功能:给定一个集合coll提取第一个元素或默认值为0,那么您应该有一个单独的函数用于此

e、 g

定义第一个或零[coll] if seq coll 第一列0 尽管编写起来有点麻烦,而且or宏似乎能让您更快地到达目的地,但您错过了FP这一强大的概念

a通过这种方式,您可以对需要执行的操作进行纯粹的功能描述 b你可以通过证明或单元测试来测试它 你可以在任何地方重复使用它,对改变的影响最小

一种更灵活的方法是:

先定义还是默认 [coll]第一个或默认coll 0 [coll-dflt-val] if seq coll 第一coll dflt val
然后只需调用:<1 first或default coll 0

imho您应该在设计中明确定义功能对象

因为您需要一个功能:给定一个集合coll提取第一个元素或默认值为0,那么您应该有一个单独的函数用于此

e、 g

定义第一个或零[coll] if seq coll 第一列0 尽管编写起来有点麻烦,而且or宏似乎能让您更快地到达目的地,但您错过了FP这一强大的概念

a通过这种方式,您可以对需要执行的操作进行纯粹的功能描述 b你可以通过证明或单元测试来测试它 你可以在任何地方重复使用它,对改变的影响最小

一种更灵活的方法是:

先定义还是默认 [coll]第一个或默认coll 0 [coll-dflt-val] if seq coll 第一coll dflt val 然后只需调用:<1 first或default coll 0

or解决方案适合这种情况。对于不足或不充分的情况,另一个选项是使用带异常默认宏:

or解决方案适用于这种情况。对于不足或不充分的情况,另一个选项是使用带异常默认宏:

使用:

用0替换>的零秒参数的函数是

(fnil > nil 0)
所以比如说,

((fnil > nil 0) 1 (first []))
=> true
使用:

用0替换>的零秒参数的函数是

(fnil > nil 0)
所以比如说,

((fnil > nil 0) 1 (first []))
=> true

谢谢你的修改,第一次修改差点让我窒息;谢谢你的修改,第一次修改差点让我窒息;如果第一个只返回nil,它是否应该返回默认值?如果seq的第一个值为false[false]或nil[nil]?@PiotrekBzdyl噢,天哪。。。如果列表为空。如果第一个只返回nil,它是否应该返回默认值?如果seq的第一个值为false[false]或nil[nil]?@PiotrekBzdyl噢,天哪。。。如果列表是空的,我个人不认为使用或宏会使代码功能降低。我个人更喜欢重用或,因为它是clojure的一部分,而不是引入单独的函数。这是最好的解决方案,因为它处理第一个元素为nil的集合,但我不能真的对它投赞成票,因为关于它是否有功能的荒谬的咆哮。我没有说它是否有功能——作为一个宏,它将取代任何有功能的东西。我只是说,对于上述问题,有一种“更”实用的做事方式。我的意图是让Clojure/Lisp上的新手也能深入了解or的逻辑:我个人不认为使用or宏会降低代码的功能。我个人更喜欢重用或,因为它是clojure的一部分,而不是引入单独的函数。这是最好的解决方案,因为它处理第一个元素为nil的集合,但我不能真的对它投赞成票,因为关于它是否有功能的荒谬的咆哮。我没有说它是否有功能——作为一个宏,它将取代任何有功能的东西。我只是说,对于上述问题,有一种“更”实用的做事方式。我的目的是让Clojure/Lisp上的新手也能对or的逻辑提供一些见解: