Size: a a a

Rust — русскоговорящее сообществo

2020 September 06

А

Алекс in Rust — русскоговорящее сообществo
Ой
источник

А

Алекс in Rust — русскоговорящее сообществo
Я думал это чат по игре, а тут программисты сидят. Пока ребята
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
а какой есть ближайший возможный аналог для такой вещи?
struct A {
   type MyAwesomeAlias = i32;
   var: MyAwesomeAlias
}

снаружи алиас делать не хочу, потому что он относится только к этой структуре
источник
2020 September 07

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ну, можно завернуть в mod {} и use-нуть только структуру
источник

P

Pavel in Rust — русскоговорящее сообществo
Alexander Zaitsev
а какой есть ближайший возможный аналог для такой вещи?
struct A {
   type MyAwesomeAlias = i32;
   var: MyAwesomeAlias
}

снаружи алиас делать не хочу, потому что он относится только к этой структуре
struct<A>{
 foo: A
}
?
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Pavel
struct<A>{
 foo: A
}
?
не хочу я вставлять generic туда - я просто хочу сделать алиас для типа и всё
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Mikail Bagishov
Ну, можно завернуть в mod {} и use-нуть только структуру
🤮
источник

P

Pavel in Rust — русскоговорящее сообществo
Alexander Zaitsev
не хочу я вставлять generic туда - я просто хочу сделать алиас для типа и всё
а конечная цель какая? чтоб потом если что поменять?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ты про +1 уровень вложенности?
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Alexander Zaitsev
не хочу я вставлять generic туда - я просто хочу сделать алиас для типа и всё
если его ещё и дернуть можно будет аля A::MyMyAwesomeAlias извне можно будет - вообще отлично будет
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Pavel
а конечная цель какая? чтоб потом если что поменять?
целей несколько:
1) Не иметь внутри структуры полей вида
storage: HashMap<i32, Vec<i32>>, а дать такому типу именованность. Делать это внутри структуры хочу потому, что это такой алиас относится собственно только к этой структуре
2) В реализации трейта заюзать этот тип как placeholder type. Но это уже решается с алиасом в impl
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Mikail Bagishov
Ты про +1 уровень вложенности?
я про то, что это мусор какой-то по сравнению с
class A {
  using MyType = int;
};
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
В моем варианте к нему можно обратиться через имя модуля.

Еще кстати можно завести вспомогательный трейт и объявить этот тип как associated type. Тогда потом к нему можно обращаться как Foo::Alias, но для этого нужно будет иметь трейт в скоупе.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Alexander Zaitsev
я про то, что это мусор какой-то по сравнению с
class A {
  using MyType = int;
};
Ну я согласен. Довольно странно, что associated types есть, а inherent types нет.
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Mikail Bagishov
Ну я согласен. Довольно странно, что associated types есть, а inherent types нет.
rfc там никакого нет на эту тему?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Как раз гуглю :)
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Mikail Bagishov
В моем варианте к нему можно обратиться через имя модуля.

Еще кстати можно завести вспомогательный трейт и объявить этот тип как associated type. Тогда потом к нему можно обращаться как Foo::Alias, но для этого нужно будет иметь трейт в скоупе.
это я понимаю, что так можно сделать. но это всё равно костыль того же примерно уровня, что и mod
источник

P

Pavel in Rust — русскоговорящее сообществo
 
pub struct Foo<Bar> {
   pub baz: Bar
}
type Qux = f64;
type Bar = foo::Foo<Qux>;
const foo: Bar = Foo{baz: 0.0};


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

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Alexander Zaitsev
rfc там никакого нет на эту тему?
Пока я вижу https://rust-lang.github.io/rfcs/0195-associated-items.html, который разрешает type = Foo и в обычных impl-ах тоже. Сейчас поищу историю реализации.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Alexander Zaitsev
rfc там никакого нет на эту тему?
источник