Size: a a a

2021 February 20

p

polunin.ai in rust_offtopic
Ilya Lakhin
В порядке фантазирования. Ввести, например, систему маркеров: fn foo(arg: {name: this -> String} + CatLike). Трейты с этой целью тоже используют иногда.
Поздравляю, ты получил номинативную типизацию)
источник

IL

Ilya Lakhin in rust_offtopic
polunin.ai
Поздравляю, ты получил номинативную типизацию)
Но штука в том, что можно будет писать ещё так:
fn foo(arg: CatLike) {
 let name: String = arg.name();
}
источник

IL

Ilya Lakhin in rust_offtopic
(у CatLike нет никакого интерфейса, это только маркер)
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Ilya Lakhin
С кортежами, возможно, это плохая практика по той же причине, почему делать функции со слишком большим числом аргументов тоже некомильфо. Нужно стараться атомизировать как-то. Так же в общем-то и с типами.
как ты атомизируешь? Ты можешь только вкладывать бесконечно. Но если тебе нужно 30 полей, всё что ты можешь - разбить на сущность с 5 уровнями, ан каждом из которых будет по 2-3 поля. И типа норм.

На уровне именованных типов это будет работать. А на уровне кортежей что (u32, i32, String, String) что ((u32, i32), (String, String)) - всё одно
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Ilya Lakhin
В порядке фантазирования. Ввести, например, систему маркеров: fn foo(arg: {name: this -> String} + CatLike). Трейты с этой целью тоже используют иногда.
зачем мне вообще дактайпинг? Зачем мне рассчитывать на недаженые договренности когда я могу просто сделать интерфейс CatLike?
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
интерфейс делаю я, который объявляет функцию, где я хочу иметь у объектов слово name
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
то есть да, у стандартной жаваоопэшки проблема с тем, что я не могу просто так взять и навесить интерфейс на типы из стандартной библиотеки, типа массива там или инта. А в динамике просто херак - обратился к нужным свойствам и порядок. Или даже навесил прям в рантайме на объект
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
только вот тайпклассы от таких проблем не страдают
источник

R

Rafael in rust_offtopic
polunin.ai
Чо делать с дак тайпингом если я хочу иметь тайпкласс
trait Cat {
 fn name(&self) -> &str;
}
Но при этом под этот интерфейс может попасть и интерфейс
trait Dog {
 fn name(&self) -> &str;
}
?
ты не так сделал, тайпклассы надо юзать правильно
источник

R

Rafael in rust_offtopic
name- это не метод тайпкласса кот, это тайпкласс HasName или NamedAnimal
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Rafael
ты не так сделал, тайпклассы надо юзать правильно
структурные тайпклассы так и работают. Ну типа как в го
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
где любые два тайпкласса равны если их содержимое равно
источник

R

Rafael in rust_offtopic
Αλεχ Zhukovsky
структурные тайпклассы так и работают. Ну типа как в го
структурные тоже надо правильно называть
источник

R

Rafael in rust_offtopic
Αλεχ Zhukovsky
где любые два тайпкласса равны если их содержимое равно
это у них дактайпинг, ну такое
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Rafael
это у них дактайпинг, ну такое
а ты не читаешь что речь шла *именно про дактайпинг*?
источник

R

Rafael in rust_offtopic
Αλεχ Zhukovsky
а ты не читаешь что речь шла *именно про дактайпинг*?
ну так да, ну возможно я вырвали сообщение из контекста, но суть не меняется
источник

R

Rafael in rust_offtopic
надо их называть правильно
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Rafael
надо их называть правильно
это ни на что не влияет)
источник

p

polunin.ai in rust_offtopic
Rafael
name- это не метод тайпкласса кот, это тайпкласс HasName или NamedAnimal
В данном случае у меня кот так идентифицируется, почему нет
источник

p

polunin.ai in rust_offtopic
Кот это "что-то, имеющее имя"
источник