Единственный способ, которым я могу думать о его реализации, - это вложить все операторы «else if» в предложение «else» выбора над ним
Да, это вполне допустимый подход. Однако, кроме инструкций if
и else
, есть также опция для использования select
, которая возвращает либо первое, либо второе операнд, основанный на условии.
Чтобы увидеть, как другие языки решают эту проблему, я бы порекомендовал иметь go с WebAssembly Studio .
Например, следующее Код ActionScript:
export function if_else_test(input: i32): i32 {
if (input > 10) {
return 101;
} else if (input > 20) {
return 102;
} else {
return 103;
}
}
компилируется в следующее:
(func $if_else_test (export "if_else_test") (type $t1) (param $p0 i32) (result i32)
i32.const 101
i32.const 102
i32.const 103
get_local $p0
i32.const 20
i32.gt_s
select
get_local $p0
i32.const 10
i32.gt_s
select)
Приведенный выше код загружает в стек три различных возвращаемых значения, а затем использует пару операторов select для возврата правильное значение на основе двух условий if.
Несмотря на то, что logi c может быть проще следовать, если его переписать с использованием синтаксиса 'function call':
(func $if_else_test (export "if_else_test") (type $t1) (param $p0 i32) (result i32)
(select
(i32.const 101)
(select
(i32.const 102)
(i32.const 103)
(i32.gt_s
(i32.const 20)
(get_local $p0)
)
)
(i32.gt_s
(i32.const 10)
(get_local $p0)
)
)