【问题标题】:Accessing Delphi Routine Local variable访问 Delphi 例程局部变量
【发布时间】:2012-05-31 17:31:13
【问题描述】:

如何从外部访问例程的局部变量。比如这个,例如

procedure TForm1.CalculateTax(var Amount: Double);
var 
  Tax : Double;
begin
  Tax := Amount*2.5/100;
end;

【问题讨论】:

  • ... 或引用参数:procedure TForm1.CalculateTax(var Tax: Double; Amount: Double);.
  • 如果他们解决了您的问题,请不要忘记接受答案this way ;-)
  • @user1429045:现在清楚一点了吗?当您需要“记住某事”(例如,算术表达式中的操作数)时,您需要一个“变量”。一旦你有一个“结果”,你可以 1)将它存储在一个全局变量中(每个人都可以看到),2)将它传递回一个“var”引用变量或 3)将它作为一个“结果”传递回来“功能”。如果可能的话,通常首选选项 3(使用函数)。

标签: delphi


【解决方案1】:

您不能从声明它的过程之外访问局部变量。

最好的解决方案是将您的procedure 更改为function,并让它返回值。

更改您的 TForm1 声明

type
  TForm1 = class(TForm)
  ...
  procedure CalculateTax(var Amount: Double);

type
  TForm1 = class(TForm)
  ...
  function CalculateTax(const Amount: Double): Double;

更改实现
procedure TForm1.CalculateTax(var Amount: Double);
var 
  Tax : Double;
begin
  Tax := Amount*2.5/100;
end;

function TForm1.CalculateTax(const Amount: Double): Double;
begin
  Result := Amount*2.5/100;
end;

这样称呼它:

Tax := CalculateTax(YourAmount);

【讨论】:

    【解决方案2】:

    我的 0.02 美元:

    1) 我会把它变成一个“函数”而不是一个“程序”(因为它的目的是“返回一个值”——税额)

    2) 我不会在例程中硬编码“金额”或“税率”

    3) 我不会“超载”(赋予多种含义)变量“数量”

    // Better
    function TForm1.CalculateTax(purchaseAmount, taxRate: Currency) : Currency;
    begin
      Result := purchaseAmount * (taxRate / 100.0);
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2020-07-30
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多