Maxim
можете, конечно, смеяться надо мной, но я сейчас понял, что трейт - это нифига не интерфейс...
Maxim
в привычном (для меня) понимании
Safort
Ну так это интерфейс + опциональная реализация.
Aleksei (astynax)
трейт, это правило мономорфизации, скорее ну и вид ограничения для ограниченного параметрического полиморфизма
Maxim
ну я не могу сделать let foo: FooTrait = Foo{}
Aleksei (astynax)
Правильно: трейт - не тип
Maxim
вооот
Maxim
а я не разобрался сначала
Maxim
и думал, что тут все как обычно
Maxim
теперь понял
Aleksei (astynax)
Ну дак и во многих ООП языках инстанциировать интерфейсы нельзя
Aleksei (astynax)
Нельзя просто так прийти в магазин и сказать "дайте красный" без указания на то, что таки должно быть красным :)
Aleksei (astynax)
Но можно сказать "люблю всё красное"
Maxim
ну в этом контексте они мне могут дать что угодно "красное"
Maxim
да
Boris
Я не слышал про язык, который бы такое позволял =)
Aleksei (astynax)
Инстанциировать интерфейсы то?
Maxim
инстанцировать их нельзя
Maxim
но в качестве типа переменной указать интерфейс можно
Maxim
я про это говорил
Aleksei (astynax)
В питоне интерфейсы приезжают с либами типа Zope и представляют собой обычные классы, так что инстанциировать их можно :)
Крылатый
Питон ваще дело такое.
Maxim
а можно как-то скастить интерфейс в структуру?
Maxim
или это плохо и вообще нельзя?
Aleksei (astynax)
Указывать интерфейс в качестве типа можно только без указания инициализрующего значения. Иначе всё равно произойдет мономорфизация
Maxim
типа у меня есть &MyTrait, хочу его скастить в &String
Aleksei (astynax)
а можно как-то скастить интерфейс в структуру?
нельзя. Трейт сам по себе не существует
Aleksei (astynax)
Трейты, это подсказки компилятору. В рантайме их нет
Maxim
хм
Maxim
а что в таком случае лучше делать? Вот есть у меня несколько сущностей, они все реализуют один трейт, но получать мне нужно трейт, а не сущности. Тогда нужно возвращать Any а потом транслировать это в нужный тип?
Aleksei (astynax)
Типа того
Maxim
насколько это вообще плохо?
Aleksei (astynax)
Нормально, полиморфненько
Aleksei (astynax)
Только ты обычно не Any возвращаешь же, а тот же входной тип, не?
Maxim
ага
Aleksei (astynax)
Ну так это не Any, а вполне себе "всё красное"
Maxim
типы почти всегда String, но потом появятся другие
Maxim
так что мне лучше в правильный кастить
Aleksei (astynax)
Ну так заведи трейт MyToString с методом приведения к строке
Maxim
о, кстати
Maxim
нет
Maxim
тут опять встает вопрос о том, как скастить трейт в структуру
Aleksei (astynax)
Никак не скастить. Да и незачем. В реализациях трейта для конкретных типов приведение к строке и сделаешь
Maxim
ну если бы можно было обойтись методом to_string() для всех структур, то было бы хорошо
Maxim
о, я придумал
Aleksei (astynax)
так обойдись. Это же метод трейта
Maxim
короче, всем спасибо
Maxim
сделаю to_string() который вернет Result
Aleksei (astynax)
сделаю to_string() который вернет Result
тогда хоть try_to_string, чтобы Result оправдать
պլհկ
Зачем кастить?
պլհկ
Не подойдет ли тебе енум?
Maxim
сейчас в очередной раз переделаю
Maxim
и скажу
Maxim
лол
Maxim
(пока кажется, что энум лучше всего пойдет)
Meowbe/BSD-2-Clause
Енумы руста лучше чем где-либо
Meowbe/BSD-2-Clause
Слава tagged enum'ам
Boris
Я думал предложить, но сложилось впечатление, что там всё адски сложно =)
Meowbe/BSD-2-Clause
Как dynamic_cast крестовый
Крылатый
Нет.
Крылатый
dynamic_cast совсем не any
Крылатый
Скорей уж reinterpret_cast
Meowbe/BSD-2-Clause
dynamic_cast совсем не any
Суть каста та же, можно проверить провалился ли
Meowbe/BSD-2-Clause
Вроде
Крылатый
Да, динамик может исключение бросить в рантайме.
Meowbe/BSD-2-Clause
Он же нулль выдаёт если не кастанулось
Крылатый
Otherwise, the runtime check fails. If the dynamic_cast is used on pointers, the null pointer value of type new_type is returned. If it was used on references, the exception std::bad_cast is thrown.
Sergey
где можно спросить о формировании API для веб сервисов?
Sergey
мне тут ребята возвращают по запросу /api/notfoundageasdasdasd 404 с html
Meowbe/BSD-2-Clause
Вот нет :)
А где лучше?
Sergey
учитывая что весь API на JSON
Meowbe/BSD-2-Clause
лл
Sergey
В firebug
я не об этом в моей команде хрень творят