Jak*_*ers 1 progress-4gl openedge
我有一个函数GetQuantity返回一个小数。在某些情况下,我不返回任何内容,即返回空字符串,以便显示“”。
实际行为:
所需行为:
在情况3中,我显然可以返回-1.0或其他值,但这不是我所需要的。
FUNCTION GetQuantity RETURNS DECIMAL(INPUT num AS INTEGER):
DEFINE VARIABLE quantity AS DECIMAL NO-UNDO FORMAT "->,>>>,>>9.9<<<<<<<<".
quantity = 3.3. //initialization is neccessary as IRL my value is initialized
IF num = 1 THEN DO:
RETURN 1.0.
END.
ELSE IF num = 2 THEN DO:
RETURN 2.0.
END.
RETURN quantity. //base case return ' '
END.
DISPLAY GetQuantity(3)
Run Code Online (Sandbox Code Playgroud)
一种方法是返回?如果是默认值,请在输出例程中进行处理。
作为?也是计算失败的结果(除以0),这可能很危险。
另一种选择是编写一个具有Value属性和Default标志以及ToString()覆盖的类。
BLOCK-LEVEL ON ERROR UNDO, THROW.
USING Progress.Lang.*.
CLASS Test.SampleValueHolder:
DEFINE PUBLIC PROPERTY Value AS DECIMAL NO-UNDO
GET.
PRIVATE SET.
DEFINE PUBLIC PROPERTY IsDefault AS LOGICAL NO-UNDO
GET.
PRIVATE SET.
CONSTRUCTOR PUBLIC SampleValueHolder (pdeValue AS DECIMAL,
plDefault AS LOGICAL):
ASSIGN THIS-OBJECT:Value = pdeValue
THIS-OBJECT:IsDefault = plDefault .
END CONSTRUCTOR.
METHOD PUBLIC OVERRIDE CHARACTER ToString ():
IF THIS-OBJECT:IsDefault THEN
RETURN "" .
ELSE
RETURN STRING (THIS-OBJECT:Value, "->,>>>,>>9.9<<<<<<<<") .
END METHOD.
END CLASS.
Run Code Online (Sandbox Code Playgroud)
现在您可以将RETURN NEW SampleValueHolder(1.0,FALSE)或RETURN NEW SampleValueHolder(?,TRUE)转换为类型Test.SampleValueHolder的变量。
每当显示该值的STRING()时,您都将获得格式化值或默认值“”。
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |