有沒有辦法在函數的返回語句返回幾個值(並非返回一個對象),就像我們可以在去做(或其他語種)飛鏢 - 函數返回多個值
例如,讓我們一起來基本的例子
在走,我們做
func vals() (int, int) {
return 3, 7
}
我們能做到這一點在DART(有一些像這樣的東西)
int, String foo() {
return 42, "foobar";
}
將真棒,但我無法找到互聯網
感謝上合適的解決方案,阿列克謝
有沒有辦法在函數的返回語句返回幾個值(並非返回一個對象),就像我們可以在去做(或其他語種)飛鏢 - 函數返回多個值
例如,讓我們一起來基本的例子
在走,我們做
func vals() (int, int) {
return 3, 7
}
我們能做到這一點在DART(有一些像這樣的東西)
int, String foo() {
return 42, "foobar";
}
將真棒,但我無法找到互聯網
感謝上合適的解決方案,阿列克謝
鏢不支持多個返回值。
你可以返回一個數組,
List foo() {
return [42, "foobar"];
}
,或者如果你想要的值鍵入使用Tuple
類像包https://pub.dartlang.org/packages/tuple提供。請參閱either
以獲取返回值或錯誤的方法。
用於'tuple'的+1,它與Go的關係最爲密切其內置。它只是沒有內置到Dart中,據推測還沒有太多需要,他們保持語言儘可能輕。 –
還有其他優先事項。像這樣的功能已經被多次討論過了。目前它是關於Dart 2.0的強大模式和泛型功能以及爲2.0之後的更快迭代做準備(統一的前端,內核)。接下來希望不可爲空的類型和其他類型。我更喜歡不添加太多功能,但我完全信任Dart團隊做出正確的決定。 –
我想補充一點,Go中多個返回值的主要用例之一是錯誤處理,Dart處理以自己的方式處理Exceptions和失敗的promise。
當然,這留下了一些其他使用案例,讓我們看看使用明確的元組時,代碼的外觀:
import 'package:tuple/tuple.dart';
Tuple2<int, String> demo() {
return new Tuple2(42, "life is good");
}
void main() {
final result = demo();
if (result.item1 > 20) {
print(result.item2);
}
}
不太簡明,但它的清潔和表現力的代碼。我最喜歡的是,一旦你的快速實驗項目真正開始,並且你開始添加功能並且需要添加更多的結構來保持事物的頂部,它不需要改變很多。
class FormatResult {
bool changed;
String result;
FormatResult(this.changed, this.result);
}
FormatResult powerFormatter(String text) {
bool changed = false;
String result = text;
// secret implementation magic
// ...
return new FormatResult(changed, result);
}
void main() {
String draftCode = "print('Hello World.');";
final reformatted = powerFormatter(draftCode);
if (reformatted.changed) {
// some expensive operation involving servers in the cloud.
}
}
所以,它對Java沒有太大的改進,但它的工作原理很清楚,並且對於構建UI來說是非常有效的。我真的很喜歡我可以快速將事情整合在一起(有時在工作中休息時從DartPad開始),然後在知道該項目將繼續並發展時添加結構。
該用例的函數式編程的一個常見模式是https://pub.dartlang.org/packages/either –
我不知道任何語言是否真的返回多個值。 Python使用與上面相同的語法,它返回一個元組,它只是一個簡單的對象。我懷疑Go是相似的。 – Carcigenicate
相關:https://groups.google.com/a/dartlang.org/forum/m/#!topic/misc/j-1I--HjXag – Carcigenicate