我如何在 NetLogo 中执行 SWITCH 或 SELECT CASE?
How do I do a SWITCH or SELECT CASE in NetLogo?
NetLogo 没有原生的 SWITCH、SWITCH-CASE 或 SELECT-CASE 类型的多重条件,我如何在没有大量嵌套 IF-ELSE
语句的情况下做同样的事情?
我们可以用一连串嵌套的 IF-ELSE 语句来模拟 SWITCH 语句,格式化后不会乱七八糟,而且实际上易于阅读和编辑。
我们将格式化 IF-ELSE 语句链,目标如下:
- 避免过度缩进,
- 避免代码行过长
- 让它在其他语言中看起来更像 switch
- 重新排列大小写不会破坏语法
- 有默认情况
SWITCH 语句
外观如下:
;; example of SWITCH style conditional block
if-else [ criteria 1 ] [ action-1 ][
if-else [ criteria 2 ] [ action-2 ][
if-else [ criteria 3 ] [ action-3 ][
if-else [ true ] [ default-action ][
]]]]
其他注意事项
一些程序员可能会发现默认操作测试 true
并在最后的“IF”为空时保留“else 块”是令人反感的。你可以做你喜欢的事。我发现将默认大小写明确化,使所有操作的格式完全相同,并避免在末尾出现一堆尴尬的标点符号。
- 避免行太长——这样会更难阅读
- 保持条件简短——如果需要,将它们包装在记者中。
- 操作要简短——如果需要,将它们包装在过程中。
- 这有助于代码读起来更像一个故事而不是代码。
从NetLogo 6.1开始,NetLogo支持多大小写ifelse
,可以像其他语言的switch
语句一样使用。这里是 an example from the docs:
ask patches [
let choice random 4
(ifelse
choice = 0 [
set pcolor red
set plabel "r"
]
choice = 1 [
set pcolor blue
set plabel "b"
]
choice = 2 [
set pcolor green
set plabel "g"
]
; elsecommands
[
set pcolor yellow
set plabel "y"
])
]
这是重写为使用它的其他答案中的示例:
;; example of SWITCH style conditional block
(ifelse
(criteria-1) [ action-1 ]
(criteria-2) [ action-2 ]
(criteria-3) [ action-3 ]
[ default-action ]
)
这不需要在最后一行有 ]
的“多重关闭”,所以总体上对我来说看起来更干净。
NetLogo 没有原生的 SWITCH、SWITCH-CASE 或 SELECT-CASE 类型的多重条件,我如何在没有大量嵌套 IF-ELSE
语句的情况下做同样的事情?
我们可以用一连串嵌套的 IF-ELSE 语句来模拟 SWITCH 语句,格式化后不会乱七八糟,而且实际上易于阅读和编辑。
我们将格式化 IF-ELSE 语句链,目标如下:
- 避免过度缩进,
- 避免代码行过长
- 让它在其他语言中看起来更像 switch
- 重新排列大小写不会破坏语法
- 有默认情况
SWITCH 语句
外观如下:
;; example of SWITCH style conditional block
if-else [ criteria 1 ] [ action-1 ][
if-else [ criteria 2 ] [ action-2 ][
if-else [ criteria 3 ] [ action-3 ][
if-else [ true ] [ default-action ][
]]]]
其他注意事项
一些程序员可能会发现默认操作测试 true
并在最后的“IF”为空时保留“else 块”是令人反感的。你可以做你喜欢的事。我发现将默认大小写明确化,使所有操作的格式完全相同,并避免在末尾出现一堆尴尬的标点符号。
- 避免行太长——这样会更难阅读
- 保持条件简短——如果需要,将它们包装在记者中。
- 操作要简短——如果需要,将它们包装在过程中。
- 这有助于代码读起来更像一个故事而不是代码。
从NetLogo 6.1开始,NetLogo支持多大小写ifelse
,可以像其他语言的switch
语句一样使用。这里是 an example from the docs:
ask patches [
let choice random 4
(ifelse
choice = 0 [
set pcolor red
set plabel "r"
]
choice = 1 [
set pcolor blue
set plabel "b"
]
choice = 2 [
set pcolor green
set plabel "g"
]
; elsecommands
[
set pcolor yellow
set plabel "y"
])
]
这是重写为使用它的其他答案中的示例:
;; example of SWITCH style conditional block
(ifelse
(criteria-1) [ action-1 ]
(criteria-2) [ action-2 ]
(criteria-3) [ action-3 ]
[ default-action ]
)
这不需要在最后一行有 ]
的“多重关闭”,所以总体上对我来说看起来更干净。