【问题标题】:Dart Lexical Scoping Question - Nested Functions [duplicate]Dart 词法范围问题 - 嵌套函数 [重复]
【发布时间】:2021-04-03 19:56:27
【问题描述】:

此代码有误:


void functionA (){
  int varA;
  functionB();
}

void functionB(){
  varA = 2; ///???
}

此代码是一个错误,因为显然在函数 B 内部,“varA”尚未定义,我引用了一个未声明的变量。

我的问题是,鉴于这两个函数的范围/层次结构,有没有办法通过函数 B 内部的代码(然后在函数 A 内部调用函数 B)来更改函数 A 的 varA?

我知道你可以通过将当前类实例作为参数传递给带有“this”关键字的函数来对类做类似的事情。这样,即使函数是全局定义的,您也可以通过函数更改局部类变量。可以用嵌套函数做类似的事情吗?谢谢!

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以像这样在 dart 中将函数作为参数传递:

    void functionA () {
      int varA = 0;
      
      print(varA);
      
      functionB((i) {
        varA = i;
      });
      
      print(varA);
    }
    
    /// The parameter is a function that has no return type and takes an integer parameter.
    void functionB(void Function(int) setVarA){
      setVarA(100);
    }
    

    它输出:

    0
    100
    

    你可以像这样改变变量,或者你可以将functionB的返回类型设置为int并将其返回值赋给varA。取决于您要达到的目标。

    【讨论】:

    • 感谢您的回答,我现在要把它打到我的 IDE 中,看看我能不能把它包起来!
    • 谢谢,虽然有点复杂和间接,但这确实有效。这也让我对 dart 有了更深入的理解——将函数作为参数传递给函数的能力。我相信随着我继续学习之旅,我会发现此设备的更多用途。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2011-07-10
    • 2010-12-07
    • 2019-08-21
    • 2016-09-25
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多