我在这里定义了一个内部函数:
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
是否可以在定义函数的范围之外调用内部函数?
答案 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和一个完整的函数。