追記

ɥozɐʞıɥ


2017-07-24 もう夏バテ [長年日記]


2017-07-23 Rustを続けてみて [長年日記]

_ [Rust] トレイト

これも理解しておくのです。

構造体にトレイト*1を追加してあげないとコンパイルエラーになっちゃう。

struct Color{

r: u32,

g: u32,

b: u32,

}

fn main() {

let x = Color{r :255, g: 255, b: 255};

let y = x;

println!("{:?}",y);

}

これだと

error[E0277]: the trait bound `Color: std::fmt::Debug` is not satisfied

--> src/main.rs:11:21

|

11 | println!("{:?}",y);

| ^ the trait `std::fmt::Debug` is not implemented for `Color`

|

= note: `Color` cannot be formatted using `:?`; if it is defined in your crate, add `#[derive(Debug)]` or manually implement it

= note: required by `std::fmt::Debug::fmt`

error: aborting due to previous error

だそうなのでdebug traitを追加

#[derive(Debug)]

struct Color{

r: u32,

g: u32,

b: u32,

}

fn main() {

let x = Color{r :255, g: 255, b: 255};

let y = x;

println!("{:?}",y);

}

この時点ではCopy Traitを追加してないので

#[derive(Debug)]

struct Color{

r: u32,

g: u32,

b: u32,

}

fn main() {

let x = Color{r :255, g: 255, b: 255};

let y = x;

println!("{:?}",y);

println!("{:?}",x);

}

だとコンパイルエラーです

error[E0382]: use of moved value: `x`

--> src/main.rs:12:21

|

10 | let y = x;

| - value moved here

11 | println!("{:?}",y);

12 | println!("{:?}",x);

| ^ value used here after move

|

= note: move occurs because `x` has type `Color`, which does not implement the `Copy` trait

error: aborting due to previous error

そこでCopyとClone Traitを追加してあげると通ります

#[derive(Debug,Copy,Clone)]

struct Color{

r: u32,

g: u32,

b: u32,

}

fn main() {

let x = Color{r :255, g: 255, b: 255};

let y = x;

println!("{:?}",y);

println!("{:?}",x);

}

それかyのscopeを狭めて借用を使うんですかね。

#[derive(Debug)]

struct Color{

r: u32,

g: u32,

b: u32,

}

fn main() {

let x = Color{r :255, g: 255, b: 255};

{

let y = &x;

println!("{:?}",y);

}

println!("{:?}",x);

}

*1 特性

_ [モフ太] 散歩

夕方、涼しいとまでは言わないが暑くはない

モフ太さんぽ
モフ太さんぽ posted by (C)ひかぞぉ

_ [買物][Office] Microsoft Office 365 Solo (1年版)|オンラインコード版|Win/Mac対応

昨年買ったライセンスを更新しました。10%オフです。

_ [食事]近所の温泉

近所の温泉に行ってみました。いつもより小じんまりしておりますが悪くない。

晩御飯
晩御飯 posted by (C)ひかぞぉ


2017-07-22 相方誕生日プレゼント [長年日記]

_ [買物][] 忍物語

8/12 13と終物語 (下)が放送です。

_ [買物][BD][映画] 傷物語 I 鉄血篇

この日に映画を観ました。

_ [買物][映画][BD] 傷物語 II熱血篇

この日に映画を観ました。

_ [買物][映画][BD] 傷物語 III冷血篇

この日に映画を観ました。

_ [モフ太] 散歩

ヲレのリハビリですな。

モフ太さんぽ
モフ太さんぽ posted by (C)ひかぞぉ

_ [Rust] Mutableと借用

これコンパイルエラーです。

fn main() {

let mut x = 5;

let y = &mut x;

*y = 1;

println!("{}",y);

println!("{}",x);

}

yがxを借用しているのだがそのyの生存期間がxより早く終わらない

error[E0502]: cannot borrow `x` as immutable because it is also borrowed as mutable

--> src/main.rs:8:19

|

4 | let y = &mut x;

| - mutable borrow occurs here

...

8 | println!("{}",x);

| ^ immutable borrow occurs here

9 | }

| - mutable borrow ends here

error: aborting due to previous error

だから{}でyの生存期間を短くしてやると通る

fn main() {

let mut x = 5;

{

let y = &mut x;

*y = 1;

println!("{}",y);

}

println!("{}",x);

}

あと*yで参照の実体*1を変更しているので出力は

1

1

です。

*1 表現あってる?

_ [Rust] Mutable

これは通る

fn main() {

let spaces = " ";

let spaces = spaces.len();

println!("{}",spaces);

}

がこれは警告で通る

fn main() {

let mut spaces = " ";

let spaces = spaces.len();

println!("{}",spaces);

}

Compileメッセージ

 warning: variable does not need to be mutable

 --> src/main.rs:2:9

  |

2 | let mut spaces = " ";

  | ^^^^^^^^^^

  |

 = note: #[warn(unused_mut)] on by default

Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs

Running `target/debug/study`

1



2002|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|
追記