Skip to content

Instantly share code, notes, and snippets.

@dhirabayashi
Last active August 6, 2019 12:06
Show Gist options
  • Save dhirabayashi/e44ddb1505a0949d84a9b309a05f959a to your computer and use it in GitHub Desktop.
Save dhirabayashi/e44ddb1505a0949d84a9b309a05f959a to your computer and use it in GitHub Desktop.
fn main() {
for i in 1..10 {
for j in 1..10 {
print!("{} * {} = {}\t", i, j, i * j);
}
println!();
}
}
fn main() {
let x = 1;
let y = x;
println!("{}", y);
// Copyな型なので使える
println!("{}", x);
let a = "abc";
let b = a;
// 参照型の場合も使える(文字列リテラルは&strなので)
println!("{}", a);
}
fn factorial(n: usize) -> usize {
if n == 0 {
1
} else {
n * factorial(n - 1)
}
}
fn main() {
println!("{}", factorial(10));
}
fn fizzbuzz(n: usize) {
for i in 0..n {
if i % 15 == 0{
println!("FizzBuzz");
} else if i % 3 == 0 {
println!("Fizz");
} else if i % 5 == 0 {
println!("Buzz");
} else {
println!("{}", i);
}
}
}
fn main() {
fizzbuzz(20);
}
fn add(x: isize, y: isize) -> isize {
x + y
}
fn main() {
println!("{}", add(1, 2));
let f = add;
println!("{}", f(3, 4));
}
fn main() {
println!("Hello, World");
}
fn ref_string(s: &String) {
println!("{}", s);
}
fn main() {
let s = "This is a resource".to_string();
// 参照一つ目
let t = &s;
ref_string(t);
// 参照二つ目。イミュータブルなら同時に複数存在できる
ref_string(&s);
}
fn main() {
let n = 1 + 2;
// n = 5; error[E0384]: cannot assign twice to immutable variable `n`
println!("{}", n);
}
fn main() {
let s = "owned data".to_string();
{
let t = s;
}
// println!("{}", s); // error[E0382]: borrow of moved value: `s`
// println!("{}", t); // error[E0425]: cannot find value `t` in this scope
{
let s = "owned data".to_string();
let ref_s = &s;
// 以下のように`s`のライフタイムを`ref_s`より先に終わらせようとするとエラーになる...はずなのだがならない…
let t = s; // cannot move out of `s` because it is borrowed
}
}
fn main() {
match 10 {
0 => println!("0"),
1...10 => println!("small number"),
n => println!("big number: {}", n),
}
match (1.0, 1) {
(0.0, 0) => println!("all zero"),
(f, 1...10) => println!("float: {} with small number", f),
_ => println!("other tuple"),
}
}
fn main() {
let mut x = 1 + 2;
x = 5;
println!("{}", x);
}
fn refmut_string(s: &mut String) {
println!("{}", s);
}
fn main() {
let mut s = "this is a resource".to_string();
// ミュータブルな参照一つ目
let t = &mut s;
refmut_string(t);
// ミュータブルな参照二つ目はエラー
// refmut_string(&s); // error[E0499]: cannot borrow `s` as mutable more than once at a time
}
fn rebind() {
let sum = 0;
for i in 0..10 {
let sum = sum + i;
}
println!("{}", sum);
}
fn reassign() {
let mut sum = 0;
for i in 0..10 {
sum += i;
}
println!("{}", sum);
}
fn main() {
rebind();
reassign();
}
fn main() {
let mut a = 1;
let b = &mut a;
*b = 2;
// println!("{}", a); error[E0502]: cannot borrow `a` as immutable because it is also borrowed as mutable
println!("{}", *b);
}
fn print_string(s: String) {
println!("{}", s);
}
fn main() {
let s = "This is a resource".to_string();
println!("{}", s);
let t = s;
//println!("{}", s); error[E0382]: borrow of moved value: `s`
print_string(t);
//print_string(t); error[E0382]: use of moved value: `t`
}
fn main() {
let a: [isize;3] = [1, 2, 3];
let b: &[isize] = &a;
println!("{:?}", a);
println!("{:?}", b);
for elm in b {
println!("{}", elm);
}
println!("{}", b[0]);
}
fn main() {
let mut a: String = "abc".to_string();
a += "def";
println!("{}", a);
let x = 1.0.to_string();
println!("{}", x);
a += x.as_str();
println!("{}", a);
}
fn square_sum(n: isize) -> isize {
(0..n)
.filter(|i| i % 2 == 0)
.map(|i| i * i)
.sum()
}
fn main() {
println!("{}", square_sum(10))
}
fn main() {
let a: (isize, f64, &str) = (1, 1.0, "abc");
println!("{}, {}, {}", a.0, a.1, a.2);
}
fn main() {
let x: i32 = 1 + 2;
println!("{}", x);
let x: &str = "abc";
println!("{}", x);
}
fn main() {
let mut vec = vec![1, 2, 3];
// ミュータブルなのでここで変更可能
vec.push(4);
println!("{:?}", vec);
// ここでイミュータブルな参照が発生している(らしい)
for i in vec.iter() {
// 元はミュータブルだが、イミュータブルな参照が発生しているので変更できない
// vec.push(i * 2);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment