1

以下は、私が使用したい特性です

trait CircularEnumeration extends Enumeration {

    class CircularVal extends Val {
      def next(): Value = {
        apply((id + 1) % values.size)
      }
    }

    protected override final def Value: CircularVal = new CircularVal;

    ///////////////////////////////////////////////////////////////////////////

    def nextValue(value: Value) = {
      //first way
      val nextIndex = values.toSeq.indexOf(value) + 1;
      val value_nomath = if (nextIndex >= values.size) {
        values.toSeq(0);
      }
      else {
        values.toSeq(nextIndex);
      }

      //second way
      val value_withmath = this((value.id + 1) % values.size);

      assert(value_nomath == value_withmath);

      value_withmath;
    }
}

すでに 2 つの方法を試しましたが、どちらも失敗したことがわかります。最初の使用法は次のようになります。
MyEnumeration(index).next
これにより、この列挙の次の値が返されます

2 番目の使用法は次のようになります。
MyEnumeration.nextValue(MyEnumeration(index))
もう一度、これは次の値を返します。

しかし、どちらの場合も、どのタイプがどちらであるかという問題があります。特性の内部でValueは、実際にCircularEnumeration.Valueは、この特性を持つクラスの内部にあるためValueです。MyEnumeration.Value

何か案は?

4

1 に答える 1