【发布时间】:2019-04-29 13:16:09
【问题描述】:
Dart 中的一个数据类:
import 'package:validate/validate.dart';
class AuthUser {
final String email, token, username, bio, image;
AuthUser(this.email, this.token, this.username, this.bio, this.image) {
Validate.isEmail(this.email);
}
@override
String toString() {
return 'AuthUser{email: $email, token: $token, username: $username, bio: $bio, image: $image}';
}
}
其中Validate.isEmail在匹配失败时会抛出错误:
static void matchesPattern(String input, RegExp pattern,[String message = DEFAULT_MATCHES_PATTERN_EX]) {
if (pattern.hasMatch(input) == false) {
throw new ArgumentError(message);
}
}
static void isEmail(String input,[String message = DEFAULT_MATCHES_PATTERN_EX]) {
matchesPattern(input,new RegExp(PATTERN_EMAIL),message);
}
现在我想用一种优雅的方式来新建这个类。
在使用 Scala 时,我可以使用 Try(new AuthUser(...)) 并对其进行模式匹配。
在 Dart 中,我首先尝试了 RxDart,
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
Observable.just(AuthUser("email", "token", "username", "bio", "img"))
.doOnError((e, s) => print("oh no"))
.listen((e) => print(e.toString()));
});
}
不起作用,测试因错误而失败(这意味着 RxDart 根本没有捕获错误!!!)
我想试试Future,也失败了。
我想使用 dartz,但我很担心,因为只有一个维护者...
有什么建议吗?
【问题讨论】:
-
RxDart 没有捕捉到异常,因为异常被抛出之前它是
Observable的一部分。详细地说,您的代码相当于final user = AuthUser(); Observable.just(user);。如您现在所见,例外是在创建用户时。 -
dart 中没有模式匹配
-
@RémiRousselet 我知道,我只需要一个解决方案来优雅地尝试/捕获异常
-
@JRomero 所以有什么建议吗?
-
我的第一反应就是不要。该语言具有捕获错误的特定方法,并且从另一种语言中移植您首选的方法可能不是最佳实践。不过这是个人意见。
标签: scala functional-programming dart flutter rx-java