0

Возможно ли иметь замыкания как опционально аргументы в функциях?Закрытие в качестве необязательных аргументов функции в Rust

мне нужно что-то вроде этого (в псевдокоде):

fn function(x: int, optional expr |int| -> int) -> int 

и использование было бы что-то вроде этого:

// just the mandatory argument 
n = function(z); 

или необязательно:

// passed closure would be called inside the function 
n = function(z, |x| x * x); 

Я просто не могу понять правильный синтаксис, если его даже возможно (будет признателен за полный пример с правильным матом h выражения).

ответ

5

Дополнительные параметры указаны в wish list, но они еще не указаны на языке AFAIK.

То, что вы, очевидно, можно сделать, это сделать две функции

fn function(x: int) -> int {function_with_expr (x, |n|n*n)} 
fn function_with_expr(x: int, expr: |int| -> int) -> int 

Это подход, используемый в стандартной библиотеке.


Вы также можете передать особую черту в функцию, как проплывающие ToSocketAddr в bind, и тогда вы могли бы реализовать эту черту для различных типов кортежей. Я не уверен, что прохождение закрытия через кортеж будет таким же простым, как передача его напрямую.