AS3:调用函数时没有得到typeError

时间:2015-12-24 20:53:02

标签: actionscript-3 flash

我正在使用ActionScript编写自己的语言作为个人项目(是的,我认为AS3不是构建语言的最佳语言,但更不用说了。)

注意:我已多次检查过,我的编译器选项“启用严格模式”设置为True。我已尝试将其设置为False以尝试,但我没有得到不同的结果。

无论如何,我有一个:

package NodyCode.Classes 
{

    public class NCString 
    {

        var value:String;

        public function NCString(expression:String = "") {
            value = expression;
        }


        public function rindex(substr:NCString, startIndex:int = 0x7fffffff):uint {
            //code here
        }
    }
}

由于我正在编写自己的语言,因此我需要确保函数和方法可以使用无限数量的参数。出于这个原因,我使用匿名函数,以便我可以使用apply方法。像这样:

//This code is in a class named ClassMethods
public static var StringMethods:Object = {
    rindex: function(substr:NCString, startIndex:int = 0x7fffffff):uint {
        return this.rindex(substr, startIndex);
    }
}

而且,在我的代码的其他地方,我接听电话:

return ClassMethods.StringMethods["rindex"].apply(ncstr1, [ncstr2, [5]]);

每当用户使用错误类型的参数时,我都希望抛出一个错误。

因此,在这种情况下,我在rindex上使用参数:ncstr1substr = ncstr2调用startIndex = [5]方法。请注意,根据我的匿名函数的定义,startIndex应该是int不是Array

所以,我预计会抛出一个错误。但是,使用rindex调用startIndex = 5

为什么[5]转换为5,有什么方法可以防止这种情况发生?如果没有,我可以随时解决这个问题,但如果我不这样做,我宁愿不这样做。

编辑:最后明白我没有提到我使用的是匿名函数。

2 个答案:

答案 0 :(得分:0)

您是否将difftime()'s man page设置为false进行编译? (见strict mode。)

double选项:“打印未定义的属性和函数调用;还对提供给方法调用的赋值和选项执行编译时类型检查”。

默认为true,但如果以某种方式将其设置为false,则可能会禁用编译时检查。我会检查你的编译器设置(无论是在IDE中还是在命令行上进行编译),并确保它们是正确的。

答案 1 :(得分:0)

好的,这就是评论中所说的内容:

我确实在strict模式下使用了我的编译器。我没有收到错误的原因是因为我使用的是匿名函数的apply方法。使用apply方法时,类型检查会松动。这就是为什么[5]被强制转移到5的原因。

显然没有办法阻止这种情况。