Size: a a a

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

2020 September 25

ST

Stanislav Tkach in Rust — русскоговорящее сообществo
Серде тут кажется оверкилом.
источник

ST

Stanislav Tkach in Rust — русскоговорящее сообществo
Эрик
Нет готового.
Ну ладно, буду велосипедить.
источник

f

folex in Rust — русскоговорящее сообществo
trait Callback: Fn(String, String, serde_json::Value) -> serde_json::Value + Clone {}
type XCallback = Box<dyn Callback + Send + 'static>;


> error[E0038]: the trait Callback cannot be made into an object
ЧЯДНТ? Хочу сказать, что замыкание должно быть можно клонировать

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=027097d83b10cb483006fea09b38d929
источник

Э

Эрик in Rust — русскоговорящее сообществo
Stanislav Tkach
Ну ладно, буду велосипедить.
trait StringAssoc {
fn from_str(s: &str) -> Option<Self>;
fn as_str(&self) -> &'static str;
}

macro_rules! impl_str_assoc {
(enum $enum:ty { $($var:ident = $str:expr ;)* }) => {
 impl StringAssoc for $enum {
  #[inline]
  fn from_str(s: &str) {
   match s {
    $(
    $str => Some(Self::$var),
    )*
    _ => None,
   }
  }

  #[inline]
  fn as_str(&self) -> &'static str {
   match self {
    $(
    Self::$var => $str,
    )*
   }
  }
 }
};
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
folex
trait Callback: Fn(String, String, serde_json::Value) -> serde_json::Value + Clone {}
type XCallback = Box<dyn Callback + Send + 'static>;


> error[E0038]: the trait Callback cannot be made into an object
ЧЯДНТ? Хочу сказать, что замыкание должно быть можно клонировать

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=027097d83b10cb483006fea09b38d929
Там же из ошибки понятно. Clone: Sized, а трейт обжект не сайзед.
источник

f

folex in Rust — русскоговорящее сообществo
Эрик
Там же из ошибки понятно. Clone: Sized, а трейт обжект не сайзед.
Непонятно только, как быть. Нельзя потребовать у замыкания быть Clone?
источник

Э

Эрик in Rust — русскоговорящее сообществo
folex
Непонятно только, как быть. Нельзя потребовать у замыкания быть Clone?
Нельзя, если хочешь, чтобы было трейт обжектом.
источник

f

folex in Rust — русскоговорящее сообществo
Эрик
Нельзя, если хочешь, чтобы было трейт обжектом.
А есть какие-то альтернативы, если нужно хранить замыкание в структуре?
источник

f

folex in Rust — русскоговорящее сообществo
Можно тип-параметр прокинуть конечно, но мне это не подойдет, мне нужно в коробке, да
источник

Э

Эрик in Rust — русскоговорящее сообществo
источник

f

folex in Rust — русскоговорящее сообществo
o_O я почти ничего не понял
источник

Э

Эрик in Rust — русскоговорящее сообществo
folex
o_O я почти ничего не понял
?
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Эрик
Там же из ошибки понятно. Clone: Sized, а трейт обжект не сайзед.
Чувак
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
folex
trait Callback: Fn(String, String, serde_json::Value) -> serde_json::Value + Clone {}
type XCallback = Box<dyn Callback + Send + 'static>;


> error[E0038]: the trait Callback cannot be made into an object
ЧЯДНТ? Хочу сказать, что замыкание должно быть можно клонировать

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=027097d83b10cb483006fea09b38d929
Это потому что Clone не Object-safe
источник

Э

Эрик in Rust — русскоговорящее сообществo
folex
o_O я почти ничего не понял
Fn работает по &self, так что тебе не нужен Clone, потому что &T всегда Clone.
источник

f

folex in Rust — русскоговорящее сообществo
Сори, я ушел пытаться нагуглить какое-то объяснение коду :) Пока безуспешно.

А что поменялось от for <'a> &'a Self?
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Есть какой-то DynClone из крейтов, поищи
источник

f

folex in Rust — русскоговорящее сообществo
Так-то я пожалуй могу и через Rc замыкание распространять
источник

Э

Эрик in Rust — русскоговорящее сообществo
folex
Так-то я пожалуй могу и через Rc замыкание распространять
Зачем? Оно у тебя в боксе будет.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Бокса дерефится.
источник