You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中Self(rhs)与Self(lhs)含义及rhs、lhs来源解析

Rust BitAnd示例中解构语法说明

示例中的BooleanVector是一个单字段元组结构体,包装了Vec<bool>类型,Self(rhs)和Self(lhs)都是Rust的 元组结构体模式解构 语法,不存在特殊逻辑,作用是直接从结构体实例中拆出内部包装的字段,绑定到指定变量上。


Self(rhs)的含义与作用

  • Self是impl块内的关键字别名,固定指代当前正在实现trait的类型,这里等价于BooleanVector。
  • 这行出现在bitand方法的参数列表中,属于 参数位置的模式解构:
    方法的第二个参数类型为Self(即BooleanVector实例,对应按位与运算符&的右侧操作数),我们没有将整个结构体实例绑定为参数变量,而是直接在参数位用元组结构体的解构规则,把实例内部唯一的Vec<bool>字段拆出来,绑定给名为rhs的局部变量。
  • 这种写法省掉了手动访问元组结构体序号字段(即rhs.0)的步骤,代码更简洁。

Self(lhs)的含义与作用

  • 这行出现在方法体内的let语句中,属于 let绑定位置的模式解构:
    self是bitand方法的接收者,对应&运算符的左侧操作数,类型同样是Self。这行代码直接对self做模式匹配,把其内部包装的Vec<bool>字段拆出来,绑定给名为lhs的局部变量,效果和参数位解构完全一致。

rhs与lhs的定义来源

两个变量都没有提前单独声明,完全是上述两处解构语法生成的局部变量:

  • rhs:是right-hand side(右侧操作数)的缩写,来自第二个参数的解构,对应&运算符右侧BooleanVector实例内部的Vec<bool>
  • lhs:是left-hand side(左侧操作数)的缩写,来自对self的let解构,对应&运算符左侧BooleanVector实例内部的Vec<bool>

如果把解构语法替换成最直白的普通写法,bitand方法的逻辑和原代码完全等价,可以对照理解:

fn bitand(self, rhs_param: Self) -> Self::Output {
    let lhs = self.0; // 手动取self内部的第一个字段
    let rhs = rhs_param.0; // 手动取参数内部的第一个字段
    assert_eq!(lhs.len(), rhs.len());
    Self(
        lhs.iter()
            .zip(rhs.iter())
            .map(|(x, y)| *x & *y)
            .collect()
    )
}

内容的提问来源于stack exchange,提问作者lijeles952

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:24:25