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 -> %обработали ошибку