Rust中如何在结构体方法内访问结构体内部声明的常量
Rust impl块内关联常量访问方法
问题相关原始代码
struct Parser; impl Parser { const ALPHABETS_UPPERCASE: [char; 26] = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ]; fn get_alphabet(&self) { self::.. } }
问题描述
上述Rust代码定义了Parser结构体,在其impl实现块中声明了关联常量ALPHABETS_UPPERCASE,如何在get_alphabet成员方法内部正确访问该常量?
正确访问方式
关联常量是和类型本身绑定的,不绑定到具体实例,代码里写的self::路径是错误的——self::在方法内指向当前模块的根路径,和当前实例无关。
有两种合法访问写法:
- 推荐写法:使用
Self关键字指代当前impl块对应的类型,访问路径为Self::ALPHABETS_UPPERCASE。这种写法后续如果修改结构体名称,不需要同步修改常量访问的代码,可维护性更好。 - 等价写法:直接写全类型路径
Parser::ALPHABETS_UPPERCASE,运行效果和第一种完全一致,但结构体重命名时需要同步修改此处代码。
注意:不要使用self::路径访问关联常量,该路径指向当前模块根,无法定位到绑定在类型上的关联常量。
修正后的方法示例:
fn get_alphabet(&self) { // 推荐写法 let alphabets = Self::ALPHABETS_UPPERCASE; // 等价的全路径写法 // let alphabets = Parser::ALPHABETS_UPPERCASE; }
内容的提问来源于stack exchange,提问作者Axel
相关产品推荐
相关产品推荐

