質問編集履歴
2
mo
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() ->
|
27
|
+
fn new() -> Self {
|
36
28
|
|
37
|
-
|
29
|
+
Worker {
|
38
30
|
|
39
|
-
func: |x| func_a
|
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へ
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() ->
|
35
|
+
fn new() -> WorkerType {
|
28
36
|
|
29
|
-
|
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**を用いたオリジナルのコードにさらに近づけて修正しました。
|