質問編集履歴

2

mo

2020/06/24 01:44

投稿

namuyan
namuyan

スコア76

test CHANGED
File without changes
test CHANGED
@@ -14,14 +14,6 @@
14
14
 
15
15
 
16
16
 
17
- trait WorkerTrait {}
18
-
19
-
20
-
21
- type WorkerType = Box<dyn WorkerTrait>;
22
-
23
-
24
-
25
17
  struct Worker<F: Fn(&[u8]) -> Vec<u8>> {
26
18
 
27
19
  func: F,
@@ -32,21 +24,17 @@
32
24
 
33
25
  impl<F: Fn(&[u8]) -> Vec<u8>> Worker<F> {
34
26
 
35
- fn new() -> WorkerType {
27
+ fn new() -> Self {
36
28
 
37
- Box::new(Worker {
29
+ Worker {
38
30
 
39
- func: |x| func_a (x),
31
+ func: |x| func_a(x),
40
32
 
41
- })
33
+ }
42
34
 
43
35
  }
44
36
 
45
37
  }
46
-
47
-
48
-
49
- impl<F: Fn(&[u8]) -> Vec<u8>> WorkerTrait for Worker<F> {}
50
38
 
51
39
 
52
40
 
@@ -62,7 +50,9 @@
62
50
 
63
51
  ~~[Playground1](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f00d0a729d43687cebe854731513d0ce)~~
64
52
 
65
- [Playground2](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a552495277969ddf9b248cd1f7a40f4c)
53
+ ~~[Playground2 -duck typing=](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a552495277969ddf9b248cd1f7a40f4c)~~
54
+
55
+ [Playground3](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4adb7973f4f322afc36aa117028ea8f3)
66
56
 
67
57
 
68
58
 
@@ -75,3 +65,11 @@
75
65
  ----
76
66
 
77
67
  元のコードPlayground1では`main()`を除いてもコンパイルできませんでした。そこで**Duck typing**を用いたオリジナルのコードにさらに近づけて修正しました。
68
+
69
+
70
+
71
+ さらに追記
72
+
73
+ ----
74
+
75
+ **Duck typing**が問題に絡んでいると思っていましたが関係なかったので修正を戻しました。

1

Duck typingへ

2020/06/24 01:44

投稿

namuyan
namuyan

スコア76

test CHANGED
File without changes
test CHANGED
@@ -14,6 +14,14 @@
14
14
 
15
15
 
16
16
 
17
+ trait WorkerTrait {}
18
+
19
+
20
+
21
+ type WorkerType = Box<dyn WorkerTrait>;
22
+
23
+
24
+
17
25
  struct Worker<F: Fn(&[u8]) -> Vec<u8>> {
18
26
 
19
27
  func: F,
@@ -24,17 +32,21 @@
24
32
 
25
33
  impl<F: Fn(&[u8]) -> Vec<u8>> Worker<F> {
26
34
 
27
- fn new() -> Self {
35
+ fn new() -> WorkerType {
28
36
 
29
- Main {
37
+ Box::new(Worker {
30
38
 
31
- func: |x| func_a(x),
39
+ func: |x| func_a (x),
32
40
 
33
- }
41
+ })
34
42
 
35
43
  }
36
44
 
37
45
  }
46
+
47
+
48
+
49
+ impl<F: Fn(&[u8]) -> Vec<u8>> WorkerTrait for Worker<F> {}
38
50
 
39
51
 
40
52
 
@@ -48,12 +60,18 @@
48
60
 
49
61
  ```
50
62
 
51
- [Playground](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f00d0a729d43687cebe854731513d0ce)
63
+ ~~[Playground1](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f00d0a729d43687cebe854731513d0ce)~~
64
+
65
+ [Playground2](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a552495277969ddf9b248cd1f7a40f4c)
52
66
 
53
67
 
54
68
 
69
+ 恐らく`Worker::<F>::new()`のような形で指定すると思われますがどのように書けばいいのかわかりません。何かわかる方は回答の方をよろしくお願いします。
55
70
 
56
71
 
57
- 恐らく`Worker::<F>::new()`のような形で指定すると思われますがどのように書けばいいのかわかりません。
58
72
 
59
- 何かわかる方は回答の方をよろしくお願いします。
73
+ 追記 6/24
74
+
75
+ ----
76
+
77
+ 元のコードPlayground1では`main()`を除いてもコンパイルできませんでした。そこで**Duck typing**を用いたオリジナルのコードにさらに近づけて修正しました。