LINUX.ORG.RU

Замыкание как аргумент другого замыкания

 


0

4

Как в Rust можно определить функцию, аргументом которой является замыкание с аргументом-замыканием?

Вариант с динамической диспетчеризацией работает, но со статической компилятор сообщает об ошибке «the type of this value must be known in this context»:

fn dyn1(f: &Fn(i32)) {
}

fn dyn2(f: &Fn(&Fn(i32))) {
}

fn stat1<F: Fn(i32)>(f: F) {
}

// ???
fn stat2<F: Fn(i32), F2: Fn(F)>(f: F2) {
}

fn main() {
    // x - целое число, динамическая диспетчеризация
    dyn1(&|x| { });

    // fx - замыкание с целым аргументом, динамическая диспетчеризация
    dyn2(&|fx| {fx(1)});

    // x - целое число, статическая диспетчеризация
    stat1(|x| { });

    // fx - замыкание с целым аргументом, статическая диспетчеризация
    stat2(|fx| {fx(1)}); // ошибка: the type of this value must be known in this context
}
★★
Ответ на: комментарий от ckotinko

На с++ картины аски-артом пишут компилящиеся и работающие

Ну это определенно плюс языка. Ведь программы написанные аски артом самые читаемые, поддерживаемые и вообще. Всегда пиши аски-артом!

Aswed ★★★★★
()

царь прав.

Deleted
()
Ответ на: комментарий от Aswed

херово быть таким дураком как ты. вот пишут на электробудке «не влезай убьёт», а дурак вроде тебя начнет бегать вокруг будки с криками «убийцы! убийцы! они хотят нас убить»

ckotinko ☆☆☆
()
Ответ на: комментарий от red75prim

Потому, что это костыльное убожество, которое ничего не может? Это не то, о чём я говорил.

Во-первых - это убожество с жабка-генериками, а не функция. Во-вторых - это вообще не функция, даже без учёта спащенных из жабки генериков.

Функция сама по себе является блоком кода - ей не нужны дополнительные. Смысл в том, чтобы уйти от натягивания статической лапши на рантайм-функцию. Контекст - это не убожество в виде аргумента.

Нормальноый реализации не нужны кастыли в виде генериков. Не нужна функция в функции, не нужны аргументы для передачи контекста.

anonymous
()
Ответ на: комментарий от anonymous

Функция это в первую очередь математическая абстракция, представляющая единицу вычисления. А «джава дженерики», это (статический) полиморфизм. Эти две концепции - важные части теории вычислимости, но вы видимо готовы выкинуть к херам всю эту теорию и предложить что-то лучше?

Nexmean
()
Ответ на: комментарий от ckotinko

Ну если уж использувать дурацкие метафоры вместо нормального языка, то это ты тут приводишь открытые щитки с искрами во все стороны как образец красоты и изящества инженерной мысли.

Aswed ★★★★★
()
Ответ на: комментарий от Nexmean

Ещё раз, меня не интересуют твоя религия. Все твои объяснения существуют в рамках твоей же религии, которая меня интересовать не должна. Меня должна интересовать объективная логика.

А в рамках религии можно придумать любой догмат, а далее всё очень удобно. Тебя спрашиваю «почему и зачем» - ты отвечаешь «это догма в моей религии - хочешь сменить мне религии?».

Любая объективная причина должна существовать без отсылки на левые догматы. Я тебе задал вопрос - почему некий общий тип не может выражать любой из тех типов, для которых он общий? Чёткий вопрос, а ответа нет. А почему?

Причины просты - ты не знаешь ответа. Тебе сказали «так должно быть» с отсылкой на какой-то догмат. Тебе этого хватило, а мне нет. Для меня объяснения вида «это важный догмат моей религии» - не котируются, как и для любого не адепта.

Ведь всё так просто. Очень просто.

anonymous
()
Ответ на: комментарий от Deleted

Нет. Уже выбрал чем заниматься - тем, чем и занимаюсь. Меня занятие пока не хочу, да и вряд-ли захочу.

anonymous
()
Ответ на: комментарий от anonymous

жабка-генериками

Какие ещё «жабка-генерики»? Учите матчасть. Generics в яве - это compile-time check + runtime type-erasure. Generic функция в яве не мономорфизируется. В Расте этому больше соответствует трейт-объекты.

аргументы для передачи контекста

Какие ещё «аргументы для передачи контекста»? `v` - это аргумент функции, контекст хранится в `f`. В общем, учите матчасть.

red75prim ★★★
()
Ответ на: комментарий от red75prim

Разве ещё не понятно, что с этим человеком разговаривать абсолютно бессмысленно? Для него математика это религия, зато «объективная логика», псевдонаучный философский термин, - абсолют. Высказанное вслух мнение такого человека об областях смежных с математикой не более чем звуковые волны с высоким уровнем энтропии. Такого философа можно разве что пускать статейки на лурке писать и то прежде надо убедиться, что статья никак не касается точных наук.

Nexmean
()
Ответ на: комментарий от red75prim

Какие ещё «жабка-генерики»? Учите матчасть. Generics в яве - это compile-time check + runtime type-erasure. Generic функция в яве не мономорфизируется. В Расте этому больше соответствует трейт-объекты.

Клоун, зачем ты мне вещаешь эту ахинею? Это синтаксическая и семантическая паста генериков из жабки, а особенности их реализации в жабки - к делу не относятся.

Какие ещё «аргументы для передачи контекста»? `v` - это аргумент функции, контекст хранится в `f`. В общем, учите матчасть.

Опять ахинея. Ты мне насрал дерьма, выдав это за что-то. Тебе сказали, что это дерьмо и почему дерьмо. Ты обделался и начал повторять знакомую всеми идиотам шаблонную фразу про матчасть. Есть что ответить? Валяй, а нечего - не пиши мне ахинею.

Тебе сказали, что это дерьмо. а) это кастыльная генерик-параша. б) контекст должен передаваться прозрачно, да и вообще передавать не должен.

Ты же накастылил убогий хелворд, ведь твоей одной извилины на больше не хватает, выдал его за то, о чём говорил я, а после того, как тебя поставили на место - начал нести ахинею про матчасть. Совсем упоротый? Лечись, невменяшка.

anonymous
()
Ответ на: комментарий от Nexmean

Ещё один клоун, которого я помножил на ноль, который пытается, вместо того, чтобы отвечать мне - кукарекать что-то обо мне.

Что мы тут видим? Тут мы видим то, что клоун неспособен ответить, но пытается играть в идиота. Он пытается защититься какой-то абстрактной математикой, т.е. - подменить контекст.

Ему задали чёткий вопрос - он обделался. Далее, он начал в меня кидаться какой-то убогой теорией, которая не является математикой. Которой он может только подтереться. Ничто в этом мире не обязано соответствовать каким-то убогим теориям, точно так же - он вообще не обосновал соответствие своих потуг и теории.

Табуретка запартная, ты не путай. Ты у меня быстро улетишь туда, на своё. И скольким бы ты клоунам не писал свои убогие потуги - это ничего не изменит.

anonymous
()
Ответ на: комментарий от ckotinko

На с++ картины аски-артом пишут компилящиеся и работающие

На perl тоже. Дальше что?

А на расте мешанина скобок и пунктуации

Просто признайся себе что до сих пор не осилил его синтаксис. А синтаксис языка на котором пишешь понимается быстро. Значит ты на нём ещё и не пишешь.

NextGenenration ★★
()
Ответ на: комментарий от pftBest

Есть уже один такой язык, хаскель называется. Результат будет совсем нечитаем.

Читаем. Другое дело, что оставлять функции верхнего уровня без типовых аннотаций считается моветоном

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.