Контекст: Я пытаюсь параметризовать функцию другой функцией и получить ее статически. С первого взгляда привязка к Fn
, похоже, соответствует моей потребности.UFCS: Разрешение метода T ::
То, что я ожидал, чтобы быть «обертка» кажется хорошо (до сих пор), я бы плохо застрял на просто обозначая метод, который я хотел бы передать:
fn binop<T,Op:Fn<(T,T),T>>(op: Op, a:T, b:T) -> T {
// [...]
op.call((a,b))
}
fn addx(a: f64, b: f64) -> f64 {
binop(f64::add, a, b)
// ^~~~~~~~ error: unresolved name `f64::add`.
}
fn main() {
addx(1.0, 2.0);
}
Я искал подсказки в RFC UFCS, и «случайно» попробовал кучу вариантов обозначения (вплоть до ссылки std::ops::Add::add
и прыгания на какой-то магический вывод, чтобы выполнить эту работу), но с признательностью не может понять это правильно. Любая помощь о (/ указателях) механизма разрешения будет очень полезна.
Спасибо!
ICE сообщила (я думаю) аналогичную проблему https://github.com/rust-lang/rust/issues/18501 – pao
Исправлено в [# 18061] (https://github.com/rust-lang/rust/ проблемы/18061), ваш пример просто работает сейчас. Благодарю. – pao