在Dart编程语言中调用嵌套函数

时间:2014-06-16 00:05:23

标签: dart

我在这里定义了一个内部函数:

person(firstName, lastName){
    fullName(){ //Is it possible to invoke this function outside the 'person' function?
        return firstName + " "  + lastName;
    }
    firstInitial(){
        return firstName[0];
    }
    lastInitial(){
        return lastName[0];
    }
}

接下来,我尝试调用" fullName"来自" main"的功能功能:

void main() {
  print(person("Rob", "Rock").fullName());
}

但它产生了这个错误:

Uncaught TypeError: Cannot read property 'fullName$0' of undefined

是否可以在定义函数的范围之外调用内部函数?

2 个答案:

答案 0 :(得分:3)

您可以在封闭块之外声明该函数:

void main() {
  var fullName;
  person(firstName, lastName){
      fullName = () => "firstName: $firstName lastName: $lastName";
  }
  person("Rob", "Rock");
  print(fullName());
}

或者退回:

void main() {
  person(firstName, lastName) => () => "firstName: $firstName"
                                       "lastName: $lastName";
  print(person("Rob", "Rock")());
}

如果你想要这个语法person("Rob", "Rock").fullName(),你可以返回类实例:

class Res{
  var _firstName, _lastName;
  Res(this._firstName, this._lastName);
  fullName() => "firstName: $_firstName lastName: $_lastName";
}
void main() {
  person(firstName, lastName) => new  Res(firstName,lastName);
  print(person("Rob", "Rock").fullName());
}

答案 1 :(得分:1)

这些功能可以在外部调用,问题是你的程序无法看到它们。你的函数返回void,因此内部函数是不可见的。

但是你想要做的就是定义一个类。所以更简单的方法是

  class Person {
    var firstName, lastName;
    Person(this.firstName, this.lastName);
    get fullName => "$firstName $lastName";
    firstInitial() => firstName[0];
    lastInitial() { return lastName[0]; }
  }

  main() {
    print(new Person("Rob", "Rock).fullName);
    print(new Person("Robert", "Stone").lastInitial());
  }

为了说明,我对三种不同的函数使用了三种不同的语法:getter,lambda和一个完整的函数。