鲁斯特打高尔夫球的技巧


24

尽管Rust在代码高尔夫竞赛中非常非常少地竞争(Java通常较短),但是打高尔夫仍然很有趣。缩短Rust代码的一些技巧是什么?

请在每个答案中仅张贴一个提示。

Answers:


12

使用闭包代替函数

闭包:

|n|n+1

比函数短:

fn f(n:i32)->i32{n+1}

长度超过一个语句的闭包需要大括号,但仍远短于一个函数。


9

避免.iter()。enumerate()

假设您有一些实现IntoIterator特性的x,并且您需要调用一个函数f,该函数采用元素的索引和对该元素的引用。这样做的标准方法是

x.iter().enumerate().map(f)

相反,你可以做

(0..).zip(x).map(f)

不仅可以节省您不寻常的长时间枚举,还可以节省对iter的调用!


8

如果您需要许多可变变量,则声明和初始化它们会浪费大量空间,因为每个变量都需要mut关键字,并且您无法执行a = b = c = 0之类的操作。一种解决方案是声明一个可变数组

let mut a=[0;5];

每次使用它们时,您都要多花3个字节,而不是普通变量:

a[0]+=1;

但它通常仍然值得。

对相同的技巧使用元组通常是更好的选择:

let mut t=(1,4,"this", 0.5, 'c');

这样做的好处是与数组相比,每次使用都节省了一个字节:

t.0=2

它还使它们具有不同的类型。不利的一面是,它需要更多字符来初始化。


4

转换&strString

请勿执行以下操作:

s.to_string()  // 13 bytes
s.to_owned()   // 12 bytes

这总是更短:

s.repeat(1)    // 11 bytes

如果s是字符串文字:

format!(s)     // 10 bytes

例如:使用format!("")而不是String::new()保存2个字节。

如果类型推断有效:

s.into()       // 8 bytes

4

例如,当使用字符串格式化时print!(),可以同时使用带数字和不带数字的格式化程序,以节省每个字节要格式化的一个字节:

最佳显示示例:

fn main(){
    print!("{}{}{}. Yes, {0}{}{2}. All you other{1}{2}s are just imitating.",
           "I'm",
           " Slim",
           " Shady",
           " the real");
}

哪个输出:

I'm Slim Shady. Yes, I'm the real Shady. All you other Slim Shadys are just imitating.

因此,未编号的格式化程序将按顺序分配给项目,这使您可以跳过它们的索引。请注意,每个项目只能使用一个未编号的格式化程序进行格式化,此后它将用完。


3

阅读线

考虑各种因素后,我认为这通常是检索线的最短方法。该行有一个换行符,可以通过修剪(.trim())删除它,或者如果不能通过切片来删除它。

let y=&mut"".into();std::io::stdin().read_line(y);

对于多行,lines可以使用迭代器,然后迭代的行不会以换行符结尾。需要通行导入import BufReadlines对于StdinLock<'_>类型可用。

use std::io::*;let y=stdin();y.lock().lines()

3

跳过尾部分号

在返回的函数()中,最后一个表达式也是类型的(),您不需要结尾;

fn main(){print!("Hello, world!")}

2

使用包含换行符的字符串时,如果在源代码中使用文字换行符而不是在字符串中使用字符串,则可以节省一个字节\n

println!("Hello
World!");

比以下少1个字节:

println!("Hello\nWorld!);

2

使用整数浮点数时,可以省略结尾.0以节省一个字节。

let a=1.

比以下少1个字节:

let a=1.0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.