Ответ 1
Это работает для меня:
fn addsub(x: isize, y: isize) -> (isize, isize) {
return (x + y, x - y);
}
Это в основном то же, что и в Go, но скобки необходимы.
Есть ли у Rust встроенная поддержка функций, возвращающих несколько значений, таких как Go?
func addsub(x, y int) (int, int) {
return x + y, x - y
}
Кажется, мы могли бы использовать кортеж, чтобы имитировать его. Rosetta Code представляет, как вернуть несколько значений на разных языках, но я не видел Rust.
Это работает для меня:
fn addsub(x: isize, y: isize) -> (isize, isize) {
return (x + y, x - y);
}
Это в основном то же, что и в Go, но скобки необходимы.
В Rust вы можете вернуть кортеж с более чем одним значением:
fn my_func() -> (u8, bool) {
(1, true)
}
Язык, возвращающий больше, чем значение, вероятно, эмулирует это с помощью кортежа или другой структуры данных, как и в большинстве соглашений о вызовах, возвращаемое значение находится только в одном регистре.
Не могу сказать о Go, но есть большие шансы, что они просто эмулируют несколько значений внутри кортежа и время компиляции, заставляя вас управлять возвратами.
Я не вижу никаких проблем с ржавкой, выполняющей это, так как это управляет ocaml или haskell (и другими), и они обеспечивают проверку типов в возвращаемых значениях (или кортежей), поэтому вероятность того, что что-то пойдет не так, низка. Наиболее распространенным способом управления возвращаемыми значениями является деконструирование кортежа в двух или более привязках (let a, b = tuple_2()
).
Просто мои два цента, не стесняйтесь исправлять меня.
В Rust вам не нужно использовать ключевое слово return:
fn addsub(x: isize, y:isize) -> (isize, isize) {
(x + y, x - y) // use tuple to simulate it
}