当条件为假时,`when` return 是什么意思?
What does `when` return when the condition is false?
scheme@(guile-user)> (define val (when #f 1))
scheme@(guile-user)> val
scheme@(guile-user)> (null? val)
= #f
scheme@(guile-user)> (boolean? val)
= #f
scheme@(guile-user)> (pair? val)
= #f
scheme@(guile-user)> (when val 1)
= 1
它的计算结果确实是 #t
,但它是什么?
更新:docs 说:"When ... the test evaluates to #f
, the value of the expression is not specified." 所以它可能是任何东西,不应该依赖于任何东西。
它 returns 不是 null?
、boolean?
和 pair?
的值:
scheme@(guile-user)> (null? val)
= #f
scheme@(guile-user)> (boolean? val)
= #f
scheme@(guile-user)> (pair? val)
= #f
它不是 #f
,
证明了这一点
scheme@(guile-user)> (when val 1)
= 1
它打印什么都没有,
scheme@(guile-user)> val
scheme@(guile-user)>
那是什么? 一个值是由它的交互定义的。它在特定实现中的内部表示并不那么重要。
简而言之,它是 "not a value"。 (原文如此)
Chez 计划 prints it as #<void>
:
(define val (when #f 1))
(display val)
; Output:
#<void>
Guile 2.0.13 在 ideone.com prints it as #<unspecified>
.
scheme@(guile-user)> (define val (when #f 1))
scheme@(guile-user)> val
scheme@(guile-user)> (null? val)
= #f
scheme@(guile-user)> (boolean? val)
= #f
scheme@(guile-user)> (pair? val)
= #f
scheme@(guile-user)> (when val 1)
= 1
它的计算结果确实是 #t
,但它是什么?
更新:docs 说:"When ... the test evaluates to #f
, the value of the expression is not specified." 所以它可能是任何东西,不应该依赖于任何东西。
它 returns 不是 null?
、boolean?
和 pair?
的值:
scheme@(guile-user)> (null? val)
= #f
scheme@(guile-user)> (boolean? val)
= #f
scheme@(guile-user)> (pair? val)
= #f
它不是 #f
,
scheme@(guile-user)> (when val 1)
= 1
它打印什么都没有,
scheme@(guile-user)> val
scheme@(guile-user)>
那是什么? 一个值是由它的交互定义的。它在特定实现中的内部表示并不那么重要。
简而言之,它是 "not a value"。 (原文如此)
Chez 计划 prints it as #<void>
:
(define val (when #f 1))
(display val)
; Output:
#<void>
Guile 2.0.13 在 ideone.com prints it as #<unspecified>
.