找回密码
 点一下
查看: 1015|回复: 2

Galaxy的for循环支持(虽然不知道它是什么版本加入的,但是写一下好了)

[复制链接]
发表于 2013-11-25 00:41:00 | 显示全部楼层 |阅读模式
前几天无意中发现Galaxy脚本可以支持for循环了。(并不是触发器的for循环而是脚本的,触发器的for其实以前一直是用while循环假冒的,因为以前Galaxy里只有while这一种循环)


不过我不确定它是哪个版本的加入的功能,反正自由之翼刚发布时肯定没有。所以也许是2.0.11加入的,也许是更早的自由之翼某个版本加入的。

我在2010年3月写的《目前已知的Galaxy和C的区别》这个教程里,第“16”条原本是“不支持for循环,只能用while循环”。
http://bbs.islga.org/read-htm-tid-38654-page-1-fpage-1.html

但是现在for循环已经加入到galaxy的语法中,所以就顺便提一下。我想C语言的for循环大家应该都会用,不过galaxy由于有一些特殊规则(见上面的链接),所以这里特别解说一下galaxy的for循环的用法。






以下是一条最标准的galaxy的for循环语句:

  1. int i;
  2. for(i=0;i<3;i+=1){
  3.     //这里填任意的循环体内容。比如输出i的内容什么的
  4. }
复制代码


你可能注意到了,和c语言标准的for(int i=0;i<3;i++)相比:

由于该文第2条的规定,Galaxy的局部变量必须声明在函数顶部。因此循环变量(假如是局部变量的话)无法在for的参数中声明,必须函数顶部声明,for的第一个参数只能用于给循环作初值化或省略。
由于该文第5条的规定,Galaxy不支持++操作和--操作。因此i++必须用i+=1来表示。当然循环变量的步长并不仅限于1,可以是任何值,整个循环条件也可以是任何返回类型可以进行bool判断的表达式。
由于该文第18条的规定,循环体就算只有一行也不允许省略大括号。所以{}不能忘记加。



在看完最标准的for循环后,我们来看看最简单的版本。

以下是最简单的一条galaxy的for循环语句:

  1. for(;;){}
复制代码


没错,for的三个参数都可以省略。不过这会导致循环无法自动退出,除非你在循环体内用break;手动退出否则它会一直循环下去直到到达Galaxy的单个周期函数执行语句的硬上限(大概是五千多万次)。

你可以任意省略for的任意参数,因此如果你在给前面已经给循环变量赋过初值了,在这里你也可以省略它。

  1. int i=0
  2. for(;i<=7;i*=3){
  3.     ...
  4. }
复制代码


此外任何省略组合都有效,比如for(;;i-=3){...},for(x=1;z==0;){...},for(;y!=0;){...}之类的,不过如果省掉了循环条件,那么记得记得在循环体内手动用break;语句来退出。



关于Galaxy的更多学习资料。可以看这两份帖子:

通过这个帖子来了解Galaxy和C的区别
http://bbs.islga.org/read-htm-tid-38654-page-1-fpage-1.html

通过这个帖子来学习“引用”功能
http://bbs.islga.org/read-htm-tid-1034938-page-1-fpage-1.html
 楼主| 发表于 2013-11-25 00:49:29 | 显示全部楼层
顺便一说。2.0.11版本中,触发器的for循环背后的代码也已经改用galaxy的for循环实现了(以前是用while实现的)。

我也是看到这个才突然发现Galaxy目前已经有for循环了的。
回复

使用道具 举报

发表于 2013-11-25 18:00:29 | 显示全部楼层
关掉页面之后又回来顶一下头目……
嗯嗯,头目的帖子一定要顶。(虽然四夕水可能就一直用触发器了……)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-4-20 12:09 , Processed in 0.088789 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表