teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

mo

2020/06/24 01:44

投稿

namuyan
namuyan

スコア76

title CHANGED
File without changes
body CHANGED
@@ -6,34 +6,33 @@
6
6
  unimplemented!()
7
7
  }
8
8
 
9
- trait WorkerTrait {}
10
-
11
- type WorkerType = Box<dyn WorkerTrait>;
12
-
13
9
  struct Worker<F: Fn(&[u8]) -> Vec<u8>> {
14
10
  func: F,
15
11
  }
16
12
 
17
13
  impl<F: Fn(&[u8]) -> Vec<u8>> Worker<F> {
18
- fn new() -> WorkerType {
14
+ fn new() -> Self {
19
- Box::new(Worker {
15
+ Worker {
20
- func: |x| func_a (x),
16
+ func: |x| func_a(x),
21
- })
17
+ }
22
18
  }
23
19
  }
24
20
 
25
- impl<F: Fn(&[u8]) -> Vec<u8>> WorkerTrait for Worker<F> {}
26
-
27
21
  fn main() {
28
22
  // let worker = Worker::<F>::new();
29
23
  let worker = Worker::new();
30
24
  }
31
25
  ```
32
26
  ~~[Playground1](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f00d0a729d43687cebe854731513d0ce)~~
33
- [Playground2](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a552495277969ddf9b248cd1f7a40f4c)
27
+ ~~[Playground2 -duck typing=](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a552495277969ddf9b248cd1f7a40f4c)~~
28
+ [Playground3](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4adb7973f4f322afc36aa117028ea8f3)
34
29
 
35
30
  恐らく`Worker::<F>::new()`のような形で指定すると思われますがどのように書けばいいのかわかりません。何かわかる方は回答の方をよろしくお願いします。
36
31
 
37
32
  追記 6/24
38
33
  ----
39
- 元のコードPlayground1では`main()`を除いてもコンパイルできませんでした。そこで**Duck typing**を用いたオリジナルのコードにさらに近づけて修正しました。
34
+ 元のコードPlayground1では`main()`を除いてもコンパイルできませんでした。そこで**Duck typing**を用いたオリジナルのコードにさらに近づけて修正しました。
35
+
36
+ さらに追記
37
+ ----
38
+ **Duck typing**が問題に絡んでいると思っていましたが関係なかったので修正を戻しました。

1

Duck typingへ

2020/06/24 01:44

投稿

namuyan
namuyan

スコア76

title CHANGED
File without changes
body CHANGED
@@ -6,25 +6,34 @@
6
6
  unimplemented!()
7
7
  }
8
8
 
9
+ trait WorkerTrait {}
10
+
11
+ type WorkerType = Box<dyn WorkerTrait>;
12
+
9
13
  struct Worker<F: Fn(&[u8]) -> Vec<u8>> {
10
14
  func: F,
11
15
  }
12
16
 
13
17
  impl<F: Fn(&[u8]) -> Vec<u8>> Worker<F> {
14
- fn new() -> Self {
18
+ fn new() -> WorkerType {
15
- Main {
19
+ Box::new(Worker {
16
- func: |x| func_a(x),
20
+ func: |x| func_a (x),
17
- }
21
+ })
18
22
  }
19
23
  }
20
24
 
25
+ impl<F: Fn(&[u8]) -> Vec<u8>> WorkerTrait for Worker<F> {}
26
+
21
27
  fn main() {
22
28
  // let worker = Worker::<F>::new();
23
29
  let worker = Worker::new();
24
30
  }
25
31
  ```
26
- [Playground](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f00d0a729d43687cebe854731513d0ce)
32
+ ~~[Playground1](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f00d0a729d43687cebe854731513d0ce)~~
33
+ [Playground2](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a552495277969ddf9b248cd1f7a40f4c)
27
34
 
35
+ 恐らく`Worker::<F>::new()`のような形で指定すると思われますがどのように書けばいいのかわかりません。何かわかる方は回答の方をよろしくお願いします。
28
36
 
37
+ 追記 6/24
38
+ ----
29
- 恐らく`Worker::<F>::new()`のような形指定すると思われすがどようばいいのかわかりせん
39
+ 元のコードPlayground1では`main()`を除いてもコンパイルせんでした。そこで**Duck typing**を用いたオリジナルコードさらに近づて修正しした
30
- 何かわかる方は回答の方をよろしくお願いします。