gpt4 book ai didi

conditional-statements - Rebol 的任一条件都无法正常工作

转载 作者:行者123 更新时间:2023-12-04 08:42:08 27 4
gpt4 key购买 nike

我正在尝试设置一个条件来评估多个文本列表的值。这有效,使用 SWITCH:

options: ["" "" "" ""]

view layout [
text-list "one" "two" "three" "four" [poke options 1 value]
button "test" [switch/default options/1 [
"one" [alert "first"]
"two" [alert "second"]
"three" [alert "third"]
"four" [alert "fourth"]
] [alert "pick a number!"]
]
]

但是由于某些原因这个不起作用:

options: ["" "" "" ""]

view layout [
text-list "one" "two" "three" "four" [poke options 1 value]
button "test" [
either options/1 <> 0 [
alert "you have picked a number!"
][alert "pick a number!"]
]
]

如果我输入 options/1 <> 0,EITHER 评估总是执行第一个 block 作为条件,如果我输入 options/1 = 0,则始终执行第二个 block 作为条件,这显然根本不是它应该如何工作的。

这是怎么回事?

最佳答案

您使用空字符串表示“无”状态。正如@iceflow19 指出的那样,字符串和整数永远不会相等。如果你想知道一个字符串是否为空,使用 EMPTY?或按字面意义与 ""{} 进行比较。

(注意:我自己通常更喜欢大括号字符串,{很酷,它们{嵌套得更好}并且可以在不转义的情况下使用“引号”和撇号 [sic]。)

Rebol 有另一种表示虚无的可能性,那就是一个类型为 NONE! 的值。一个不错的属性,一个 NONE!值(value)在于它会表现得像一个逻辑!就 IF、UNLESS 和 EITHER 而言,false 值起作用。

value: none

if value [print {this won't run}]

unless value [print {this will run}]

有些例程使用 NONE!值作为它们的返回值以指示正常的“失败”条件。 IF 和 UNLESS 就是这样的例程:

>> print if 1 < 2 [{math is working}]
math is working

>> print if 1 > 2 [{math is broken}]
none ;-- Rebol2 prints out the string representation of NONE!

(注意:如果 IF、UNLESS 或 EITHER 是单个值,Rebol3 不要求您将条件放入 block 中。)

所以你可以这样写:

options: reduce [none none none none]

view layout [
text-list {one} {two} {three} {four} [poke options 1 value]
button {test} [
alert either options/1 [
{you have picked a number!}
][{pick a number!}]
]
]

REDUCE 是必需的,因为默认情况下不评估 block ...并且您将 word none 四次(相对于类型为 NONE! 的值,绑定(bind)了 NONE)。

另请注意,您可以将 SWITCH 或 EITHER 的结果传递给警报,它将是运行的分支的最后评估值。或者如果没有分支运行则没有——如上所示。

(注意:您可能很快就会想要的构造——如果您还没有发现的话——是 CASE and ALL。)

关于conditional-statements - Rebol 的任一条件都无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32270407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com