Re[15]: Тенденции языков
От: Mamut Швеция http://dmitriid.com
Дата: 23.05.15 14:25
Оценка: 18 (2) +1 :)
A>
A>    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 1, ai::UnicodeString("First Item"));
A>    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 3, ai::UnicodeString("Third Item"));
A>    error = sAIPanelFlyoutMenu->InsertItem(fPanelFlyoutMenu, 3, 2, ai::UnicodeString("Second Item"));
A>    error = sAIPanelFlyoutMenu->InsertSeparator(fPanelFlyoutMenu, 3, 5);
A>    error = sAIPanelFlyoutMenu->AppendItem(fPanelFlyoutMenu, 4, ai::UnicodeString("Fourth Item"));
A>


A>здесь любая строка может не отработать, но это игнорируется. Покажи теперь как это (это — весь твой код ) будет на исключениях, аххахаха (зловещий хохот ).



%% Для варианта 1 и 2 ниже
%% нам нужен список элементов и функция, их добавляющая

list_of_items() ->
  ["First Item", "Third Item", separator, "Fourth Item"].

add_to_menu(Item) ->
  try
    fly_out_menu:append_item(panel_flyout_menu, Item)
  catch
    _:Reason -> {error, Reason}
  end.

%% ------------------------
%% Вариант 1
%% лопатим вручную
safe_add([], Errors) ->
  case Errors of
    [] -> ok;
    _ -> %% обработали ошибки, если надо
  end;
safe_add([Item|Rest], Errors) ->
  case add_to_menu(Item) of
    ok -> safe_add(Rest, Errors);
    {error, Reason} = safe_add(Rest, [Reason | Errors])
  end.

%% и дальше в коде где-то

safe_add(list_of_items()).

%% ------------------------
%% Вариант 2
%% foldl

safe_add(Item, Errors) ->
  case add_to_menu(Item) of
    ok -> Errors;
    {error, Reason} -> [Reason | Errors]
  end.

%% где-то в коде
  case lists:foldl(fun safe_add/2, [], list_of_items()) of
    [] -> ok;
    Errors -> %% обрабатываем все ошибки
  end.

%% ------------------------
%% Вариант 3
%% Один в один код из Адоба

adobe_style_adъ() ->
 % игнорируем ошибки
 catch fly_out_menu:append_item(panel_flyout_menu, "First Item"),
 catch fly_out_menu:append_item(panel_flyout_menu, "Third Item"),
 catch fly_out_menu:append_item(panel_flyout_menu, "Second Item"),
 catch fly_out_menu:append_item(panel_flyout_menu, separator),
 
 % не игнорируем ошибки
 fly_out_menu:append_item(panel_flyout_menu, "First Item").

%% где-то дальше в коде
try 
  adobe_style_adъ()
catch 
  _:Reason -> %обработали ошибку


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.