質問編集履歴
2
mo
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() ->
|
14
|
+
fn new() -> Self {
|
19
|
-
|
15
|
+
Worker {
|
20
|
-
func: |x| func_a
|
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へ
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() ->
|
18
|
+
fn new() -> WorkerType {
|
15
|
-
|
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
|
-
[
|
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
|
-
|
39
|
+
元のコードPlayground1では`main()`を除いてもコンパイルできませんでした。そこで**Duck typing**を用いたオリジナルのコードにさらに近づけて修正しました。
|
30
|
-
何かわかる方は回答の方をよろしくお願いします。
|