我定義了一個程序
public sun A(ByVal str as string)
end sub
public sub B()
A("hello") '這里提示去掃等號是怎么回事???
end sub
uj5u.com熱心網友回復:
在VB里,呼叫函式或物件方法,如果不需要賦值的情況下,是不需要括號的。比如:
A("hello")
改寫成
A "hello"
或者
Call A("hello")
uj5u.com熱心網友回復:
已經推薦此帖并加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")
這樣的陳述句,這時運行是會正常通過的。只是當然你是否意識到,原因就是這樣的呢?
uj5u.com熱心網友回復:
謝謝你!好啊uj5u.com熱心網友回復:
講解的很清楚 從來沒注意的問題
uj5u.com熱心網友回復:
細節決定成敗uj5u.com熱心網友回復:


uj5u.com熱心網友回復:


uj5u.com熱心網友回復:


uj5u.com熱心網友回復:
這個需要來好好學習一下uj5u.com熱心網友回復:
好精華的帖子啊 給跪了uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
end sub
uj5u.com熱心網友回復:
可以支持一下uj5u.com熱心網友回復:
學習下~~~uj5u.com熱心網友回復:
不錯 不錯領教 了一些新知識uj5u.com熱心網友回復:
學習學習~~uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
水軍、;路過。uj5u.com熱心網友回復:
積分兌換的法國恢復的規劃uj5u.com熱心網友回復:
學習啦oooooooooooooooooooooooouj5u.com熱心網友回復:
怎么回事呀,下個東西這么難?uj5u.com熱心網友回復:
大蘇打大三大四的uj5u.com熱心網友回復:
謝謝你!好啊uj5u.com熱心網友回復:
這帖也被推薦,我對CSDN無語。uj5u.com熱心網友回復:
完全看不懂呀,我要研究好久好久哦。。。。。。uj5u.com熱心網友回復:
謝謝啊
uj5u.com熱心網友回復:
看看就明白了uj5u.com熱心網友回復:
不錯
uj5u.com熱心網友回復:
CSDN沒什么料了。

uj5u.com熱心網友回復:
不懂VB...只知道V5uj5u.com熱心網友回復:
不知道不著調uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
xiexieluj5u.com熱心網友回復:
uj5u.com熱心網友回復:
震樓
uj5u.com熱心網友回復:
這個還真是個問題的,我也不懂uj5u.com熱心網友回復:
表示不太懂這兒uj5u.com熱心網友回復:
不是很明白。。。。。。uj5u.com熱心網友回復:
好樣的
uj5u.com熱心網友回復:
雖然不知道你說什么,感覺很厲害的樣子
uj5u.com熱心網友回復:
除錯出來了嗎uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
To 41#我本想參考你的話,哈哈,可惜CSDN又抽風了,試了下板磚還能用
其實我想說的是現在很少有人正經的問問題,回答問題,所以這樣的問題嫩推薦也能理解
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
值得超過一半人看看的,當然要推薦。這又不是VB CORE討論區
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
2樓搶風啊。 小問題,從來沒注意過,但還是很值得學習。uj5u.com熱心網友回復:
已經推薦此帖并加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" 正確,恍然大悟
uj5u.com熱心網友回復:
可能其實這也算是一個翻譯原理詞法分析方面的問題吧。一些看似是函式引數串列外的圓括號,實際上應該是起著別的使用,具體要看背景關系。比如大家最常用的C/C++。因為他里面有個逗號運算子,所以你只看到一部分代碼"(a,b)"這樣的時,是不清楚是否哪個意思的。再比如,VB中因為陣列元素外的括號也是圓括號,所以"f1(a,b)"這樣的,到底是呼叫函式還是參考陣列,還是要看定義。uj5u.com熱心網友回復:
也來看看
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
CXX之類的比較好看uj5u.com熱心網友回復:
我以前也遇到過這種問題uj5u.com熱心網友回復:
細節決定成敗uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
好精華的帖子啊 給跪了uj5u.com熱心網友回復:
從未被此迷惑過,像被坑過的同仁表示同情!!uj5u.com熱心網友回復:
我是經常掉分號 很頭疼uj5u.com熱心網友回復:
問下群主,VB到底有什么功能呢我糾結這個問題好久了,群主能不能指點迷津轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/116729.html
標籤:VB基礎類
