我仍然是Dart的新手,=>(胖箭头)的语法仍然让我感到困惑(我来自C#背景).
因此,在C#脂肪箭头(=>)表示:进入因此,例如:
Action<string> action1 = (str) => { System.Diagnostic.Debug.WriteLine("Parameter received: " + str.ToString()); }
action1("Some parameter");
Run Code Online (Sandbox Code Playgroud)
意味着:无论发送为参数action1(如果它可以被转换为string)都转到 内部范围(在我们的例子中它只是打印在内部)Debug.WriteLine()
但在Dart中它有所不同......(?)
例如在 Future.then
ClassWithFutures myClass = new ClassWithFutures();
myClass.loadedFuture.then(
(str) => { print("Class was loaded with info: $str"),
onError: (exp) => { print("Error occurred in class loading. Error is: $exp"); }
);
Run Code Online (Sandbox Code Playgroud)
飞镖编辑警告我,第一和第二print是:Expected string literal for map entry key.我认为在C#方式中str它只是为参数命名,该参数将由Future.then用于调用onValue或的内部回调填充onError
我做错了什么?
Dae*_*lus 59
您需要选择块语法或单个表达式语法,但不能同时选择两者.
你无法将=>与{}结合起来
使用您的示例,您的两个选项如下:
ClassWithFutures myClass = new ClassWithFutures();
myClass.loadedFuture.then(
(str) => print("Class was loaded with info: $str"),
onErrro: (exp) => print("Error occurred in class loading. Error is: $exp")
);
Run Code Online (Sandbox Code Playgroud)
要么
ClassWithFutures myClass = new ClassWithFutures();
myClass.loadedFuture.then(
(str) { print("Class was loaded with info: $str"); },
onErrro: (exp) { print("Error occurred in class loading. Error is: $exp"); }
);
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,它只是表达匿名函数的一种方式.
通常,如果您只想运行单个表达式,则使用=>语法表示清除程序,使用更多指向代码的表达式.例:
someFunction.then( (String str) => print(str) );
Run Code Online (Sandbox Code Playgroud)
或者您可以使用带花括号的块语法来执行更多工作或单个表达式.
someFunction.then( (String str) {
str = str + "Hello World";
print(str);
});
Run Code Online (Sandbox Code Playgroud)
但你无法将它们组合起来,因为那时你正在制作2个函数创建语法并且它会中断.
希望这可以帮助.
Ale*_*uin 34
在Dart => xxx只是一个要避免的语法糖{ return xxx; }.因此,以下两个函数是等效的:
var a = (String s) => s;
var b = (String s) { return s; } ;
Run Code Online (Sandbox Code Playgroud)
您还可以使用=>方法定义:
String myFunc(String s) => s;
String myFunc(String s) {
return s;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21423 次 |
| 最近记录: |