правда ничего не говорил на этот счет (правда у меня код немного больше, чем один файлик)
Если разделить код на несколько файлов, то он будет ругаться?
Файлы не имеют значения. Здесь всё только в функции упирается. Мы тебе писали уже много раз. Твоя проблема была в том, что ты думал, что пишешь общий код для T: Clonable, но на самом деле ты написал какую-то часть своей общей логики под конкретный тип char. Вот тебе нужно было точку уточнения типа просто вынести на уровень выше, а эту самую общую логику изначально написать обобщенной по T: Clonable.
Я писал не для char, а просто для copy из-за невнимательности. Я считал, что компилятор должен был мне сразу подсказать. Сейчас я вижу, что тебе он сказал, а значит, должен был и мне, но по непонятной мне причине он ничего не сказал. Опять же, код я использовал также, указывая, что мой тип S: Symbol (читай T: Clonable). Мне бы понять, что я делал не так
Для Container<char> ты писал там
Это конкретизация - мне все равно ее делать
Типо, представь эту строку в тестах, например
Ты писал именно для char. А так как char реализует Copy, оно тебе позволяло, ибо компилятор никак не знал что ты не хочешь copy, ты ему об этом никак не сказал. Ты только сказал что ты используешь char.
Какие у меня есть способы ему об этом сказать, писать let some_shit = Container<Clonable>::new(конкретный тип)? Сорян за псевдорастокод
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=8eb6c02999859a5fdaf0d514b6334fbc Смотри, и попробуй заменить в сигнатуре char на Box<char>. И сравни с закоментированным кодом. Сечёшь разницу?
Вооо…. вот так тоже можно, но пока не на стейбле. На nightly есть TAIT фича, и можно будет писать: Container<impl Clonable>::new(конкретный тип)
А оно в итоге не выведется как конкретный тип?
Ну тайпчекаться не должно, ибо мы специально его “затёрли”. Ведь когда у нас -> impl Clonnable функа возвращает, конкретный тип не выводится. Здесь читай то же.
Ты пишешь с конкретным чаром, а у меня его в функциях нет конкретных типов (все строется вокруг этого Clonable, а конкретные типы я использую только в тестах, например) Я не очень понимаю, что ты пытаешься сказать. Если бы я ИСПОЛЬЗОВАЛ конкретные типы, то компилятор это заметил, но я руководствовался структурами и объектами (ака структурами), которые имеют реализацию моего Clonable (собственно, как в коде написано) Хз, что насчет как раз impl Clonable в аргументах и возвращаемых значениях? Для меня же важны только некоторые свойства данного объекта. Пользователь не потеряет тип (получив вместо него нечто impl Clonable)
Копи у тебя в мейне происходит, если ты получил откуда-то impl Cloneable, то все оке будет
Так твоя проблема и проистекла о того, что ты где-то что-то написал конкретно под char, а не под T: Clonable. Вот оно у тебя и отвалилось. Иначе бы не отвалилось. Мои поинт не в том, чтобы ты использовал конкретные типы, а наоборот.
По крайней мере пока я этого не увидел в своем коде. Похер, мне все равно его переписывать Буду, например, заменять алиас хэшмапы на конкретный тип
Кстати, ты можешь сэмулировать нужный тебе эффект, написав хэлпер-функцию: fn clonable<T: Clonnable>(v: Container<T>) -> Container<T> { v }
Интересный способ не писать аннотацию типов ^^
можно просто new такой написать :D
Обсуждают сегодня