找回密码
 点一下
查看: 1880|回复: 10

神奇事件 语法检查居然没有报错

[复制链接]
发表于 2009-4-22 17:23:37 | 显示全部楼层 |阅读模式
http://bbs.islga.org/read.php?tid=26682
之前一直没注意 但是这张图的某个函数是有语法错误的 但是居然没报错
function Mirror takes real angleN,real angleK returns real
    if Sin(angleK-angleN) >= 0 then
        return 2*Acos(Cos(angleK-angleN))
    else
        return -2*Acos(Cos(angleK-angleN))
    endif
endfunction
关于这条函数
因为在endfunction前没有return
难道说是我对语法理解错了?
发表于 2009-4-22 17:28:46 | 显示全部楼层
LZ用的什么语法检查?
回复

使用道具 举报

发表于 2009-4-22 17:28:55 | 显示全部楼层
可以啊
没有什么错误
实际上代码运行到endif就肯定结束了
后面有什么都白搭
所以不会出错
如果你把if里的两个return去掉一个,也许就会报错了
回复

使用道具 举报

 楼主| 发表于 2009-4-22 17:33:59 | 显示全部楼层
引用第2楼疯人¢衰人于2009-04-22 17:28发表的  :
可以啊
没有什么错误
实际上代码运行到endif就肯定结束了
后面有什么都白搭
所以不会出错
.......
逻辑上当然没错 看样子是我误解jass语法检查机制了
回复

使用道具 举报

发表于 2009-4-22 17:39:27 | 显示全部楼层
很神奇~   以前看return bug教程的时候说的是,endfunction的上一句必须是return,不然报错
回复

使用道具 举报

发表于 2009-4-22 17:39:52 | 显示全部楼层
有else。

如果换成elseif就报错了
回复

使用道具 举报

发表于 2009-4-23 08:42:22 | 显示全部楼层
那样没错啊.

只要代码所有执行可能路径 都有return就可以的.
回复

使用道具 举报

发表于 2009-4-23 10:44:41 | 显示全部楼层
嗯,的确是正确的呢
回复

使用道具 举报

发表于 2009-4-23 11:37:57 | 显示全部楼层
引用第6楼linzefei于2009-04-23 08:42发表的  :
那样没错啊.

只要代码所有执行可能路径 都有return就可以的.
应该是最后是endif的情况下吧
如果
[jass]
function Digit takes integer i returns integer
    //获得整数i的位数
    local integer TempInt = 0
    loop   
        set TempInt = TempInt + 1
        set i = i / udg_Digit
        exitwhen i == 0
    endloop
    return TempInt
    set i = i + 1
endfunction
[/jass]
这样也会报错吧
回复

使用道具 举报

发表于 2009-4-23 13:52:08 | 显示全部楼层
再补充下那句

只要代码所有执行可能路径 的最后 都是return就可以的.
回复

使用道具 举报

发表于 2009-4-23 14:15:31 | 显示全部楼层
引用第9楼linzefei于2009-04-23 13:52发表的  :

只要代码所有执行可能路径 的最后 都是return就可以的.
那么再次强调下.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 21:30 , Processed in 0.036549 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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