Skip to content
On this page

Trait3: exercises/traits/traits3.rs

题目

rust
// traits3.rs
//
// Your task is to implement the Licensed trait for both structures and have
// them return the same information without writing the same function twice.
//
// Consider what you can add to the Licensed trait.
//
// Execute `rustlings hint traits3` or use the `hint` watch subcommand for a
// hint.

// I AM NOT DONE

pub trait Licensed {
    fn licensing_info(&self) -> String;
}

struct SomeSoftware {
    version_number: i32,
}

struct OtherSoftware {
    version_number: String,
}

impl Licensed for SomeSoftware {} // Don't edit this line
impl Licensed for OtherSoftware {} // Don't edit this line

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn is_licensing_info_the_same() {
        let licensing_info = String::from("Some information");
        let some_software = SomeSoftware { version_number: 1 };
        let other_software = OtherSoftware {
            version_number: "v2.0.0".to_string(),
        };
        assert_eq!(some_software.licensing_info(), licensing_info);
        assert_eq!(other_software.licensing_info(), licensing_info);
    }
}

您的任务是为两个结构实现Licensed Trait,并为它们返回相同的信息,而无需编写相同的函数。

考虑可以在Licensed Trait特征内添加函数内容。

题目解析

我们其实可以在Trait内为方法提供默认的实现,这样就不需要重复编写方法了。

rust
pub trait Licensed {
    fn licensing_info(&self) -> String; 
    fn licensing_info(&self) -> String { 
        String::from("Some information") 
    } 
}

参考资料

Powered by VitePress