powershell函数调用问题及原因分析。。。此代码是测试使用,重点是函数调用问题。。。
开始我是这么写的,结果发现无论如何函数返回的都是0,函数如下:
文件test.txt的内容如下:
也就是,即使我现在输入haha或者houhou或者heihei,它还是提示“none,you can add it!!”,这是怎么回事,我上网搜了下原来powershell的函数调用不用加括号,直接在函数后面写参数就行了。。于是,我将第18行改成了if(Exists $t,$a -eq 1),发现结果还是不对,然后查了好多有关powershell调用的资料,资料上说调用时可以指定要传的具体的形参和实参的对应值,我尝试了一下,将它改为:
if(Exists -temp $t, -array $a -eq 1),哈哈真可以了,好神,,结果如下:
运行结果是:
输入gaga的结果是:
然后我仔细又分析了下,其实一开始错误是有原因的,因为powershell有时候强大的让人窒息,它能把文件一行一行的读出来自动存储在一个数组中,然后按照索引进行访问,能将一些变量自动归为一组,就像这个例子,调用的时候由于没有指定形参,于是将传入的两个值$t和$a当成一个参数数组传给Exists函数的第一个参数$temp了,这样$array是空值,所以根本不执行foreach,直接返回0了。这里,我深深的感慨一下,powershell中的变量是弱类型的,当然这也是所有脚本语言的共同特点,即没有类型的限制,不用考虑是否有数组溢出、数组类型不匹配等头疼问题。也很方便,任何变量可以不指定类型,直接拿来用了,不然这里怎么会把$temp当成数组呢,即$a这个东西可能是一个整型、一个字符串、一个数组。。。。。。所以这样的话,您就别指望它报错了。
所以,以防万一,在函数调用时,还是老老实实的指定实参是传给哪个形参吧。进入写函数的时候又没有再出现过这个问题了,很奇怪。