Let’s say I have a struct Event which implements the method permalink:

struct Event {
    base_url: String,
    rel_permalink: String,
    permalink: String,
    title: String,
}

impl Event {
    fn permalink(&self) -> String {
        let permalink = format!("{}{}", self.base_url, self.rel_permalink);
        permalink
    }
}

The method takes 2 fields of the struct and the target would be to return the definition of another field.

Later I instantiate an event1: Event:

let event1 = Event {
                base_url: base_url,
                rel_permalink: rel_permalink.to_string(),
                title: node.value().name().to_string(),
                permalink = permalink(),
            };

Essentially I would like the field permalink to be the value returned by the method permalink, is something like this possible, is this correct? I couldn’t find something similar in the docs…

Pheraps using an associated function as constructor would be a better way to handle a similar situation?

Thank you so much!

  • BB_C@programming.dev
    link
    fedilink
    arrow-up
    2
    ·
    6 days ago

    It’s quite simple. Just remove the permalink field! If you are calculating it then no need to store it in the struct.

    This is inefficient. It should be the other way around. Remove base_url and rel_permalink, and store permalink and the rel_permalink offset.

    That way, you can get a zero cost &str for any of the three.

    • RustyNova@lemmy.world
      link
      fedilink
      arrow-up
      2
      ·
      6 days ago

      Technically yes, but a newbie doesn’t need that. I doubt it’s an application that performance is so critical either.

      Too much premature optimisation IMO