我试图找出正确的语法来循环正确的用户输入,同时类返回false。
validate.cls file
******DEFINITIONS and other code********
METHOD PUBLIC VOID isEntryCorrect (INPUT userEntry AS CHARACTER):
DEFINE VARIABLE cLogical as LOGICAL NO-UNDO.
IF userEntry = "wrong" THEN
DO:
cLogical = FALSE.
END.
ELSE IF userEntry = "right" THEN
DO:
cLogical = TRUE.
END.
END METHOD.
有一个.w文件,它在点击Button时接受用户输入,并将FILL-IN:SCREEN-VALUE分配给一个变量,然后将其传递给类中的方法。
UserInput.w file
****class definition***
DEFINE VAR userInput as validate NO-UNDO.
userInput = NEW validate("").
****local variable definition****
DEF VAR windowInput AS CHARACTER NO-UNDO.
DEF VAR iCount as INTEGER NO_UNDO INITIAL 0.
windowInput = FILL-IN:SCREEN-VALUE.
但是windowInput需要传递给方法。这就是我被卡住的地方。
我需要程序循环并不断要求用户输入正确的字符串,而方法是假的,但我似乎无法找出正确的语法,或者我是否走错了思路。
我的想法是,我可以使用DO WHILE来继续循环,并用一个计数器来终止。
****the incorrect code*****
DO WHILE userInput:isEntryCorrect(windowInput) <> TRUE OR iCOunt = 3:
windowInput = FILL-IN:SCREEN-VALUE.
iCount = iCount + 1.
END.
如果这样做真的有效,可能会一直循环到数到三,然后继续执行程序的其他部分。
你的类方法需要返回一个LOGiCAL值,而不是VOID。
METHOD PUBLIC LOGICAL isEntryCorrect (INPUT userEntry AS CHARACTER):
DEFINE VARIABLE cLogical as LOGICAL NO-UNDO.
IF userEntry = "wrong" THEN
DO:
cLogical = FALSE.
END.
ELSE IF userEntry = "right" THEN
DO:
cLogical = TRUE.
END.
RETURN cLogical .
END METHOD.
或者只是
METHOD PUBLIC LOGICAL isEntryCorrect (INPUT userEntry AS CHARACTER):
DEFINE VARIABLE cLogical as LOGICAL NO-UNDO.
IF userEntry = "wrong" THEN
RETURN FALSE .
ELSE IF userEntry = "right" THEN
RETURN TRUE .
RETURN ? .
END METHOD.
你的DO WHILE块就可以了。然而,为了让用户在迭代之间改变值,你需要一个输入阻塞语句。
非常老式的是。
UPDATE FILL-IN .
或者...
PROMPT-FOR FILL-IN .
当你的编码风格是更多的事件驱动(WAIT-FOR语句),你不会在DO WHILE块中做这件事。你会在一个触发器中做这件事,对填入的LEAVE事件进行触发,然后数到3即可。