LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

И каким раком MyObj some(42) тип MyObj примет объект типа Error?

А он и не примет. Если написать

some = get_some(); 

где get_some может вернуть ошибку, то не скомпилируется.

Надо писать

if (get_some()) |good_result| {
    some = good_result;
  } else |err| switch (err) {
    error.Bad_Some => {
      // обрабатываем ошибку
    },
    ...
  }

или

some = try get_some();

если как обрабатывать ошибку пока неизвестно.

Даже a+f(b). И даже plus(a, f(b))

Почему? Это как раз можно, если f(b) не вызывает ошибок. Если может вызывать, то a + try f(b), plus(a, try f(b)).

Если бы в Zig были операторы, возвращающие ошибку, то (try a+b) + c.

Исходная версия monk, :

И каким раком MyObj some(42) тип MyObj примет объект типа Error?

А он и не примет. Если написать

some = get_some(); 

где get_some может вернуть ошибку, то не скомпилируется.

Надо писать

if (get_some()) |good_result| {
    some = good_result;
  } else |err| switch (err) {
    error.Bad_Some => {
      // обрабатываем ошибку
    },
    ...
  }

или

some = try get_some();

если как обрабатывать ошибку пока неизвестно.

Даже a+f(b). И даже plus(a, f(b))

Почему это как раз можно, если f(b) не вызывает ошибок. Если может вызывать, то a + try f(b), plus(a, try f(b)).

Если бы в Zig были операторы, возвращающие ошибку, то (try a+b) + c.