6

C# で部分実装を使用して抽象クラスを作成していることに気付くことがあります。

abstract public class Executor {
    abstract protected bool Before();
    abstract protected bool During();
    abstract protected bool After();
    protected bool Execute() {
         var success = false;
         if (Before()) {
              if (During()) {
                  if (After()) {
                        success = true;
                  }
              }
         }
         return success;
    }
}

このような制御構造の知恵にもかかわらず、Rust のような関数型言語でこれ (部分的な共有実装) を達成するにはどうすればよいでしょうか?

4

2 に答える 2

2

私はさびコンパイラの手の届かないところにいるので、壊れたコードを許してください。

機能面では、3 つの関数を保持する構造体を作成して呼び出すことができます。

struct Execution {
    before: @fn() -> bool,
    during: @fn() -> bool,
    after: @fn() -> bool
}

fn execute (e: Execution) -> bool {
  ...
}

ただし、関数をファーストクラスの値として取得したら、たとえば、固定3の代わりにチェックするブール関数のリスト、または達成しようとしているものに応じて他の何かを渡すことができます。

物事のさびた面では、特性を使用してより「オブジェクト指向」にすることができます

trait Executable {
    fn execute(&self);
}

impl Execution {
    fn execute(&self) {
        ...
    }
}
于 2013-07-08T11:14:45.233 に答える