Size: a a a

2021 July 31

WS

Wire Snark in rannts
я хочу динамическую реализацию интерфейса. Грубо говоря if (x > 0) return interface{positive_func, negative_func} else return interface{negative_func, positive_func} // В Си могу так, а в Расте/Го мне нужно два типа, в которых функции переставлены. Бойлерплейт в разы больше
источник

A🌚

Al 🌚l in rannts
Так можно у структуры добавить поле с функцией и менять его
источник

WS

Wire Snark in rannts
Во. Но это же будет прямо в точности как в Си?
источник

WS

Wire Snark in rannts
И не будет использоваться фича interface
источник

ИК

Иван Кривошеев... in rannts
Какие два типа?
источник

A🌚

Al 🌚l in rannts
Ну да
источник

ИК

Иван Кривошеев... in rannts
В расте просто возвращаешь указатель на функцию
источник

WS

Wire Snark in rannts
direct_order (когда первая функция положительная, вторая - отрицательная) и reverse_order - когда наоборот
источник

ИК

Иван Кривошеев... in rannts
Ну это же просто два указателя на функцию
источник

ИК

Иван Кривошеев... in rannts
У них сигнатуры одинаковые
источник

WS

Wire Snark in rannts
ну да, но если мы хотим реализовать некий trait { func1, func2} — с одинаковыми сигнатурами, но разными именами
источник

WS

Wire Snark in rannts
то никак, кроме как два типа, не сделать же?
источник

ИК

Иван Кривошеев... in rannts
Так верни структуру с двумя указателями и все
источник

WS

Wire Snark in rannts
если сделать точно как в Си, то наверно можно — в структуру положить указатели на функции
источник

ИК

Иван Кривошеев... in rannts
Можно накрутить вообще tuple с двумя указателями на функцию
источник

WS

Wire Snark in rannts
но тут же не используется понятие интерфейса, и никаких гарантий его имплементации нет)
источник

ИК

Иван Кривошеев... in rannts
Код в студию на Си
источник

WS

Wire Snark in rannts
на Си-то он очевиден, нет? И там конечно нет гарантий, это же Си ;)
источник

ИК

Иван Кривошеев... in rannts
Я пока не встречал кода на Си, который нельзя переписать на раст, в любом случае всегда есть unsafe
источник

WS

Wire Snark in rannts
я не говорю о том, что нельзя, я о том, что идиоматический код на Расте будет другой
источник