gpt4 book ai didi

dynamic - 如何最好地从函数返回不同类型的单个值

转载 作者:IT王子 更新时间:2023-10-29 07:20:28 24 4
gpt4 key购买 nike

我有一个返回错误消息 (String) 或 Firestore DocumentReference 的函数。我打算使用一个包含两者的类并测试错误消息是否为非空以检测错误,如果不是则引用有效。然而,我认为这太冗长了,然后认为返回一个 var 可能更整洁。但是不允许返回 var。因此,我返回一个动态并测试结果是否为 String 以检测错误。浏览器。

   dynamic varResult = insertDoc(_sCollection,
dataRec.toJson());
if (varResult is String) {

然后在检查合规性之后,我从一位大师那里读到了以下内容:“将函数显式标记为返回 Dynamic(或 var、Any 或您选择调用它的任何内容)是一种糟糕的风格。您很少需要注意它(仅在实例化具有多个类型参数的泛型时有些是已知的,有些是未知的)。”

如果合适的话,我很乐意使用动态作为返回值,但通常我会尽量遵守最佳做法。我也非常清楚臃肿的软件,我会竭尽全力避免它。这就是为什么我不想使用类作为返回值的原因。

处理上述情况的最佳方法是什么,其中返回类型可以是 String 或其他一些对象,在本例中是 Firestore DocumentReference(强调非常紧凑的代码)?

最佳答案

一个选择是创建一个抽象状态类。像这样:

abstract class DocumentInsertionState {
const DocumentInsertionState();
}

class DocumentInsertionError extends DocumentInsertionState {
final String message;

const DocumentInsertionError(this.message);
}

class DocumentInsertionSuccess<T> extends DocumentInsertionState {
final T object;

const DocumentInsertionSuccess(this.object);
}

class Test {
void doSomething() {
final state = insertDoc();
if (state is DocumentInsertionError) {

}
}

DocumentInsertionState insertDoc() {
try {
return DocumentInsertionSuccess("It worked");
} catch (e) {
return DocumentInsertionError(e.toString());
}
}
}

完整示例在这里:https://github.com/ReactiveX/rxdart/tree/master/example/flutter/github_search

关于dynamic - 如何最好地从函数返回不同类型的单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55968723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com