Rust是否具有用于创建带有附加元素的数组的语法糖?

时间:2018-03-17 02:36:17

标签: rust

我有一个3元素阵列:

let color = [0.25, 0.25, 0.25];

我想将它变成一个4元素数组,它将是3元素数组加上一个附加元素:

let color_with_alpha = [color[0], color[1], color[2], 1.0];

我知道Rust在很多方面都有很酷的语法糖;这有什么用的吗?类似的东西:

let color_with_alpha = [color, 1.0];

我已经阅读了concat macro,但似乎只创建了字符串切片。我想象有一个基于矢量的解决方案,但我不需要动态调整大小。

1 个答案:

答案 0 :(得分:3)

不,没有这样的语法。

总是很难证明是负面的,但是我实施了parser of Rust code并且我已经使用Rust超过3年了;我从来没有遇到任何这样的语法。

我能想象的最接近的是为不同大小的数组实现一个特征。这很复杂,因为您无法移出非Copy数组。由于没有通用整数,因此您必须为所需的每个数组大小实现此特征。

trait ArrayAppend<T> {
    type Output;
    fn append(self, val: T) -> Self::Output;
}

impl<T: Copy> ArrayAppend<T> for [T; 3] {
    type Output = [T; 4];

    fn append(self, val: T) -> Self::Output {
        [self[0], self[1], self[2], val]
    }
}

fn main() {
    let color = [0.25, 0.25, 0.25];
    let color2 = color.append(1.0);
}