If statement Netlogo变量作用域与Let

If statement Netlogo变量作用域与Let,if-statement,scope,If Statement,Scope,一般CS的问题,因为我是让在Netlogo的行为感到惊讶 如果我在下面的If语句中声明了一个变量,那么将该变量的范围限制为该If语句是否常见 我认为作用域通常指函数,而不是像循环或if语句这样的构造。这有多普遍 if x > y : int i = 2 else: int i = 3 print(i) would return: "error: (i) does not exist" 我不确定这是否回答了您的问题,但使用let创建的关于局部变量的Netlogo编

一般CS的问题,因为我是让在Netlogo的行为感到惊讶

如果我在下面的If语句中声明了一个变量,那么将该变量的范围限制为该If语句是否常见

我认为作用域通常指函数,而不是像循环或if语句这样的构造。这有多普遍

if x > y :
     int i = 2
else:
     int i = 3

print(i)

would return: "error: (i) does not exist" 

我不确定这是否回答了您的问题,但使用let创建的关于局部变量的Netlogo编程指南指出:

局部变量

局部变量的定义和使用仅限于 特定程序或程序的一部分。创建本地 变量,使用let命令。如果您在一个 过程中,变量将存在于整个过程中。如果你 在一组方括号内使用,例如在“ask”中使用, 那么它将只存在于这些括号内


如果在if或ifelse语句中创建局部变量,则情况也是如此。因此,如果您想稍后使用该变量,请在ifelse语句之前和之外用let声明它。而不是在ifelse语句中用set赋值。

是的,netlogo的信息是问题的根源,我不知道在if语句中有其他语言将变量作用域,而是在函数级别定义作用域,这就是为什么我没有用[netlogo]标记问题的原因它比语言更通用。我可能应该在吐出答案之前更仔细地阅读你的问题。不要介意。。
to swap-colors [turtle1 turtle2]
  let temp [color] of turtle1
  ask turtle1 [ set color [color] of turtle2 ]
  ask turtle2 [ set color temp ]
end