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!
It's quite simple. Just remove the
permalinkfield! If you are calculating it then no need to store it in the struct.If you do need the field to be there (ex you serialise it with serde), then create a method called
newthat takes everything but the permalink, construct your permalink there, then return a new object.Your permalink method can now just be
self.permalink.to_string()P.S. in the second case I'd recommend to change the return type of
self.permalink()to&str. It avoids unnecessary cloning of the string.This is inefficient. It should be the other way around. Remove
base_urlandrel_permalink, and storepermalinkand therel_permalinkoffset.That way, you can get a zero cost
&strfor any of the three.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