当前位置:编程学习 > VB >>

vb调用过程编译出错意识缺少“="号,这是怎么回事???

我定义了一个过程
public sun A(ByVal str as string)


end sub 


public sub  B()

 A("hello")  '这里提示去扫等号是怎么回事???
end sub  --------------------编程问答-------------------- 在VB里,调用函数或对象方法,如果不需要赋值的情况下,是不需要括号的。
比如:
A("hello")
改写成
A "hello"
或者
Call A("hello") --------------------编程问答-------------------- 已经推荐此帖并加30分。原因是这个问题反映了VB甚至是BASIC中,一个易让人忽视的问题。

首先,1楼引用的语法说明肯定是对的。其次,楼主这种“纯手打”的代码却是不对的,说明如下:
当然,public sun A应该是public sub A的误打,这里略提一下。关键之处在,即使改成public sub A,执行时也是不会报错的!!
不信大家可试下:
Option Explicit
Public Sub A(ByVal str As String)


End Sub
Public Sub B()

 A ("hello") '这里提示去扫等号是怎么回事???
End Sub
Private Sub Form_Load()
    B
End Sub


原因是什么?因为
A ("hello")
这一行中,后面的("hello")会被整体当作一个最外层是括号运算的表达式处理,这个表达式的结果才是传递给A的参数。所以这种写法也是符合一楼说的BASIC语法规定,是不会报错的。
进一步测试就更明显了,如把A的定义改为2个参数的:
Public Sub A(ByVal str As String,ByVal str2 As String)
然后再用A ("hello","ok") 去调用,这时才会报错“缺少 =”,原因想必大家也想到了吧,因为BASIC中不想C等语言中那样有逗号运算符,这种写法,系统只会当作要传两个参数处理。而按1楼说明的语法规则,他就少了个=或应该用CALL调用了。

BTW:其实编码经验较多的老BASIC程序员,偶尔可能也会无意中写出类似
MsgBox ("ok")
这样的语句,这时运行是会正常通过的。只是当然你是否意识到,原因就是这样的呢? --------------------编程问答-------------------- 谢谢你!好啊 --------------------编程问答--------------------
引用 2 楼 bcrun 的回复:
已经推荐此帖并加30分。原因是这个问题反映了VB甚至是BASIC中,一个易让人忽视的问题。

首先,1楼引用的语法说明肯定是对的。其次,楼主这种“纯手打”的代码却是不对的,说明如下:
当然,public sun A应该是public sub A的误打,这里略提一下。关键之处在,即使改成public sub A,执行时也是不会报错的!!
不信大家可试下:
Option Explicit
Public Sub A(ByVal str As String)


End Sub
Public Sub B()

 A ("hello") '这里提示去扫等号是怎么回事???
End Sub
Private Sub Form_Load()
    B
End Sub


原因是什么?因为
A ("hello")
这一行中,后面的("hello")会被整体当作一个最外层是括号运算的表达式处理,这个表达式的结果才是传递给A的参数。所以这种写法也是符合一楼说的BASIC语法规定,是不会报错的。
进一步测试就更明显了,如把A的定义改为2个参数的:
Public Sub A(ByVal str As String,ByVal str2 As String)
然后再用A ("hello","ok") 去调用,这时才会报错“缺少 =”,原因想必大家也想到了吧,因为BASIC中不想C等语言中那样有逗号运算符,这种写法,系统只会当作要传两个参数处理。而按1楼说明的语法规则,他就少了个=或应该用CALL调用了。

BTW:其实编码经验较多的老BASIC程序员,偶尔可能也会无意中写出类似
MsgBox ("ok")
这样的语句,这时运行是会正常通过的。只是当然你是否意识到,原因就是这样的呢?



讲解的很清楚   从来没注意的问题 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 细节决定成败 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 这个需要来好好学习一下
--------------------编程问答-------------------- 除 --------------------编程问答-------------------- 好精华的帖子啊 给跪了 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- end sub  --------------------编程问答-------------------- 可以支持一下 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 学习下~~~ --------------------编程问答-------------------- 不错 不错领教 了一些新知识 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 学习学习~~ --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 水军、;路过。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 积分兑换的法国恢复的规划 --------------------编程问答-------------------- 学习啦oooooooooooooooooooooooo --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 怎么回事呀,下个东西这么难? --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 大苏打大三大四的 --------------------编程问答-------------------- 谢谢你!好啊 --------------------编程问答-------------------- --------------------编程问答-------------------- 这帖也被推荐,我对CSDN无语。 --------------------编程问答-------------------- 完全看不懂呀,我要研究好久好久哦。。。。。。 --------------------编程问答-------------------- 谢谢啊 --------------------编程问答-------------------- 看看就明白了 --------------------编程问答-------------------- 不错 --------------------编程问答--------------------
引用 36 楼 laviewpbt 的回复:
这帖也被推荐,我对CSDN无语。


CSDN没什么料了。
--------------------编程问答-------------------- 不懂VB...只知道V5 --------------------编程问答-------------------- 不知道不着调 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- xiexiel --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答--------------------   震楼 --------------------编程问答-------------------- 这个还真是个问题的,我也不懂 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 表示不太懂这儿 --------------------编程问答-------------------- 不是很明白。。。。。。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 好样的 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 虽然不知道你说什么,感觉很厉害的样子 --------------------编程问答-------------------- 调试出来了吗 --------------------编程问答-------------------- --------------------编程问答-------------------- To 41#

我本想引用你的话,哈哈,可惜CSDN又抽风了,试了下板砖还能用

其实我想说的是现在很少有人正经的问问题,回答问题,所以这样的问题嫩推荐也能理解 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 41 楼 Chen8013 的回复:
Quote: 引用 36 楼 laviewpbt 的回复:

这帖也被推荐,我对CSDN无语。


CSDN没什么料了。


值得超过一半人看看的,当然要推荐。这又不是VB CORE讨论区 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 2楼抢风啊。 小问题,从来没注意过,但还是很值得学习。 --------------------编程问答--------------------
引用 2 楼 bcrun 的回复:
已经推荐此帖并加30分。原因是这个问题反映了VB甚至是BASIC中,一个易让人忽视的问题。

首先,1楼引用的语法说明肯定是对的。其次,楼主这种“纯手打”的代码却是不对的,说明如下:
当然,public sun A应该是public sub A的误打,这里略提一下。关键之处在,即使改成public sub A,执行时也是不会报错的!!
不信大家可试下:
Option Explicit
Public Sub A(ByVal str As String)


End Sub
Public Sub B()

 A ("hello") '这里提示去扫等号是怎么回事???
End Sub
Private Sub Form_Load()
    B
End Sub


原因是什么?因为
A ("hello")
这一行中,后面的("hello")会被整体当作一个最外层是括号运算的表达式处理,这个表达式的结果才是传递给A的参数。所以这种写法也是符合一楼说的BASIC语法规定,是不会报错的。
进一步测试就更明显了,如把A的定义改为2个参数的:
Public Sub A(ByVal str As String,ByVal str2 As String)
然后再用A ("hello","ok") 去调用,这时才会报错“缺少 =”,原因想必大家也想到了吧,因为BASIC中不想C等语言中那样有逗号运算符,这种写法,系统只会当作要传两个参数处理。而按1楼说明的语法规则,他就少了个=或应该用CALL调用了。

BTW:其实编码经验较多的老BASIC程序员,偶尔可能也会无意中写出类似
MsgBox ("ok")
这样的语句,这时运行是会正常通过的。只是当然你是否意识到,原因就是这样的呢?



A ("hello","ok") 错误
A ("hello"),("ok") 正确,这样看就明朗啦
A "hello","ok" 正确,恍然大悟 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 可能其实这也算是一个翻译原理词法分析方面的问题吧。一些看似是函数参数列表外的圆括号,实际上应该是起着别的使用,具体要看上下文。比如大家最常用的C/C++。因为他里面有个逗号运算符,所以你只看到一部分代码"(a,b)"这样的时,是不清楚是否哪个意思的。再比如,VB中因为数组元素外的括号也是圆括号,所以"f1(a,b)"这样的,到底是调用函数还是引用数组,还是要看定义。 --------------------编程问答-------------------- 也来看看 --------------------编程问答-------------------- --------------------编程问答-------------------- CXX之类的比较好看 --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 我以前也遇到过这种问题 --------------------编程问答-------------------- 细节决定成败 --------------------编程问答-------------------- --------------------编程问答-------------------- 好精华的帖子啊 给跪了 --------------------编程问答-------------------- 从未被此迷惑过,像被坑过的同仁表示同情!! --------------------编程问答-------------------- 我是经常掉分号 很头疼 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- 问下群主,VB到底有什么功能呢我纠结这个问题好久了,群主能不能指点迷津 --------------------编程问答--------------------






http://www.javadad.com --------------------编程问答-------------------- --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 学习了! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- A "HELLO" 
这样就OK了。你再试试。 --------------------编程问答-------------------- 还有这么多关注VB的吗? --------------------编程问答--------------------
引用 2 楼 bcrun 的回复:
已经推荐此帖并加30分。原因是这个问题反映了VB甚至是BASIC中,一个易让人忽视的问题。

首先,1楼引用的语法说明肯定是对的。其次,楼主这种“纯手打”的代码却是不对的,说明如下:
当然,public sun A应该是public sub A的误打,这里略提一下。关键之处在,即使改成public sub A,执行时也是不会报错的!!
不信大家可试下:
Option Explicit
Public Sub A(ByVal str As String)


End Sub
Public Sub B()

 A ("hello") '这里提示去扫等号是怎么回事???
End Sub
Private Sub Form_Load()
    B
End Sub


原因是什么?因为
A ("hello")
这一行中,后面的("hello")会被整体当作一个最外层是括号运算的表达式处理,这个表达式的结果才是传递给A的参数。所以这种写法也是符合一楼说的BASIC语法规定,是不会报错的。
进一步测试就更明显了,如把A的定义改为2个参数的:
Public Sub A(ByVal str As String,ByVal str2 As String)
然后再用A ("hello","ok") 去调用,这时才会报错“缺少 =”,原因想必大家也想到了吧,因为BASIC中不想C等语言中那样有逗号运算符,这种写法,系统只会当作要传两个参数处理。而按1楼说明的语法规则,他就少了个=或应该用CALL调用了。

BTW:其实编码经验较多的老BASIC程序员,偶尔可能也会无意中写出类似
MsgBox ("ok")
这样的语句,这时运行是会正常通过的。只是当然你是否意识到,原因就是这样的呢?


其实我也是想说:A其实啥也不是,应该编译通不过吧? --------------------编程问答-------------------- 好啊,不错哦
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,