Yanıtlar:
Diyelim ki IntoIterator Özelliği'ni uygulayan bir x'iniz var ve bir öğenin indeksini alan bir f işlevini çağırmanız gerekiyor ve buna bir başvuru. Bunu yapmanın standart yolu
x.iter().enumerate().map(f)
onun yerine yapabilirsin
(0..).zip(x).map(f)
ve sadece alışılmadık uzun sayımları değil, aynı zamanda iter çağrısını da kurtarın!
Değişken değişkenlere ihtiyacınız varsa, her biri mut anahtar sözcüğünü gerektirdiği ve a = b = c = 0 gibi bir şey yapamayacağınız için bunları bildirmek ve bunları başlatmak için çok fazla alan harcar. Öyleyse çözüm, değişken bir dizi bildirmektir.
let mut a=[0;5];
Normal bir değişkene karşı her kullanışınızda 3 ekstra bayt harcarsınız:
a[0]+=1;
ama yine de buna değer olabilir.
Aynı numara için tüfek kullanmak genellikle daha iyi bir seçenektir:
let mut t=(1,4,"this", 0.5, 'c');
Bu, diziye karşı her kullanımda bir bayt kaydetme avantajına sahiptir:
t.0=2
Aynı zamanda farklı türlerde olmalarına izin verir. Olumsuz tarafı, başlatmak için daha fazla karakter gerektirir.
&str
içinString
Asla bunları yapmayın:
s.to_string() // 13 bytes
s.to_owned() // 12 bytes
Bu daima daha kısadır:
s.repeat(1) // 11 bytes
Eğer s
bir dize değişmezi geçerli:
format!(s) // 10 bytes
Örneğin: kullan format!("")
String::new()
2 bayt kaydetmek yerine .
Yazı çıkarımı çalışıyorsa:
s.into() // 8 bytes
Örneğin, dize biçimlendirmesi kullanılırken print!()
, biçimlendirilecek öğe başına bir bayttan tasarruf etmek için numaralandırılmış ve numaralandırılmamış biçimlendiriciler kullanılabilir:
En iyi örnekle gösterilmiştir:
fn main(){
print!("{}{}{}. Yes, {0}{}{2}. All you other{1}{2}s are just imitating.",
"I'm",
" Slim",
" Shady",
" the real");
}
Hangi çıktılar:
I'm Slim Shady. Yes, I'm the real Shady. All you other Slim Shadys are just imitating.
Böylece numaralandırılmamış biçimlendiriciler sırayla öğelere atanır, bu, dizini üstlerine atlamanızı sağlar. Biçimlendirmek için her öğe için yalnızca bir numaralandırılmamış biçimlendirici kullanabileceğinizi unutmayın, bundan sonra bitecektir.
Çeşitli şeyleri düşündükten sonra, bunun bir hat almanın en kısa yolu olduğunu düşünüyorum. Çizginin yeni bir çizgisi vardır, kırparak ( .trim()
) çıkarılabilir veya dilimleme ile yapılamazsa.
let y=&mut"".into();std::io::stdin().read_line(y);
Birden çok satır için, lines
yineleyici kullanılabilir, yinelenen satır daha sonra newline ile bitmez. Alınması için bir glob içe aktarması gerekiyor BufRead
, tür lines
için kullanılabilir olması gerekiyordu StdinLock<'_>
.
use std::io::*;let y=stdin();y.lock().lines()
Dönen ()
, son ifadenin de tür olduğu işlevlerde ()
, izlemeye gerek kalmaz ;
:
fn main(){print!("Hello, world!")}