即使我故意删除了'return'命令,下面的功能也能正常工作。
main() {
add(i) => i + 2; //I intentionally deleted 'return'
print(add(3)); //5
}
但是,在我故意删除'return'命令后,下面的函数不起作用。
main() {
makeAdder(num addBy) {
return (num i) {
addBy + i; //I intentionally deleted 'return'
};
}
var add2 = makeAdder(2);
print(add2(3) ); //expected 5, but null.
}
编辑以澄清我的问题。
上面后一个函数中的最后一个句子,add2(3)不返回一个值(我期望5)但只返回null。
我的问题是为什么后一个函数的'addBy + i'不会与'add(i)=>这一事实相反。第一个函数的i + 2'返回'i + 2'。
再次编辑。 答案是'=>'是{return},而不只是{}。
main() {
makeAdder(num addBy) => (num i) { return addBy + i; };
var add2 = makeAdder(2);
print(add2(3) ); // 5
}
即使下面的代码也可以作为'=>'在其中有'return'命令。
main() {
makeAdder(num addBy) => (num i) => addBy + i; ;
var add2 = makeAdder(2);
print(add2(3) ); //5
}
答案 0 :(得分:5)
在Dart中,没有明确return someValue;
的每个函数都会返回null
;
null对象没有方法'call'。
makeAdder
(add2
)没有return
返回null
,null(3)
会导致异常。
答案 1 :(得分:2)
我想在这里引用两个重要说明。它可能会帮助其他人:
尽管Dart可以选择键入(意味着,指定函数的返回类型,例如int或void是可选的),但始终建议尽可能指定类型。在您的代码中,作为良好编程习惯的标志,请务必提及返回类型。
如果您的函数未返回值,请指定void。如果您省略返回类型,则默认情况下它将返回null
。
所有函数都返回一个值。如果未指定返回值,则语句返回
null
;隐式附加到函数主体。