0

このインターフェイスの実装から実装しているインターフェイスを再帰的に呼び出すにはどうすればよいですか?

私は次のことをしています:

import io::*;
import to_str::*;
enum some_enum {
  foo(~[some_enum]),
  bar
}

impl to_str for some_enum {
  fn to_str() -> str {
    alt self {
      bar { "bar" }
      foo(nest) { "foo" + nest.to_str() } // this line
    }
  }
}

fn main() {
  println(foo(~[bar,bar,bar]).to_str());
}

そして、コンパイル時に失敗します

user@note ~/soft/mine/rust $ rustc example.rs && ./example 
example.rs:13:32: 13:43 error: failed to find an implementation of interface core::to_str::to_str for some_enum
example.rs:13             foo(nest) { "foo" + nest.to_str() }
                                              ^~~~~~~~~~~

もちろん、FP のようなこともできます。

  foo(nest) { "foo" + nest.map(|x| { x.to_str() }).to_str() }

しかし、なぜ前者のケースは有効ではないのでしょうか?

4

1 に答える 1

1

impl ofの代わりに使用することで解決できるようですimpl

implwithoutofは、実際のインターフェースが関与しない、インターフェースなしの実装のように機能します。

( http://dl.rust-lang.org/doc/tutorial.html#interface-less-implementationsを確認)

于 2012-07-15T17:23:26.500 に答える