Scala'nın `Try` gibi Dart işleme Şık hata

oy
0

Dart bir veri sınıfı:

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}';
  }
}

nerede Validate.isEmailirade maç için başarısız bir hata atar:

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);
}

Şimdi yeni bu sınıfa zarif bir şekilde kullanmak istiyorum. Scala kullanırken, ben kullanabilir Try(new AuthUser(...))ve bunu patten eşleştirme.

Ve Dart birinci ben RxDart çalıştı

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()));
  });
}

çalışmaz, testi (!!! RxDart hiç hataları yakalamak değil anlamına gelir) hata için başarısız oldu

Ve Geleceği denemek istiyorum da sonuçsuz kaldı.

Ve Dartz kullanmak istiyorum, ama sadece bir sürdürücü olduğundan ben endişeliyim ...

Herhangi bir tavsiye?

Oluştur 27/11/2018 saat 18:13
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
2

Kullandığınız Tamam değilseniz Futurebu ne tavsiye ile yanlış: kodunuzu sarmak için Future.sync () kullanarak ? Kod aşağıdaki gibi görünecektir:

void main() {
  var f = Future.sync(() {AuthUser("email", "token", "username", "bio", "img"); });
  f.then((v) =>  print("Value: " + v.toString())).catchError((e) => print("Failure: " +e.toString()));
}

Ana hile olduğunu Future.syncetkili bir parametrenin tembel değerlendirilmesini sağlayan ancak bir fonksiyonun sarılı parametrenizi geçmek zorunda. Bu aslında Scala derleyici için yaptığı aynı hiledir Try(yani çağrısı-by-name parametreleri) ama etrafında birkaç parantez ekleyerek alır.

Cevap 28/11/2018 saat 02:59
kaynak kullanıcı

oy
1

Yalnızca bir durum oluştu ya da değil o zaman kolayca aşağıdaki gibi bir yardımcı sınıf oluşturabilir olmadığına bağlı olarak ya türü döndüren temel işlevlerini istiyorum.

Aksi takdirde ben kullanmayla ilgili SergGr cevabı @ tavsiye Future.synco boru hattı gibi daha monadic verir beri.

void main() {
  Try<Error, void> result = Try.it(() => Validate.isEmail("test-example.com"));

  if (result is Success) {
    print("Good");
  } else if (result is Failure) {
    print("Error: " + result.exception().toString());
  }
}

typedef TryExec<V> = V Function();

abstract class Try<E extends Error, V> {

  static Try<E, V> it<E extends Error, V>(TryExec<V> fn) {
    try {
      return Try.success(fn());
    } catch (e) {
      return Try.failure(e);
    }
  }

  static Try<E, V> failure<E extends Error, V>(Error e) {
    return new Failure(e);
  }

  static Try<E, V> success<E extends Error, V>(V v) {
    return new Success(v);
  }
}

class Failure<E extends Error, V> extends Try<E, V> {
  final E _e;
  Failure(this._e);

  E exception() => _e;
}

class Success<E extends Error, V> extends Try<E, V> { 
  final V _v;
  Success(this._v);

  V value() => _v;
}
Cevap 28/11/2018 saat 03:28
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more