Wpisz bezpieczne łańcuchowanie metod, które nie pozwala na powtarzanie operacji

Chcę zaimplementować łączenie metod, jak w tych pytaniach:

Najlepsza praktyka do wdrożenia cechy Scala, która wspiera łączenie metod ;

Scala DSL: metoda łączenia przy użyciu metod bez parametrów

Chcę jednak, aby po użyciu „właściwości” nie można było jej już używać. Załóżmy na przykład, że mam klasę „Myclass”, dla której chcę zezwolić na użycie definicji „foo” i definicji „bar” co najwyżej raz i nie obchodzi mnie ostateczny typ powrotu. A zatem:

val c = new Myclass
c foo //ok !
c foo bar // ok!
c foo foo // refuse to compile
c foo bar foo //refuse to compile

Przez jakiś czas zmagam się z tym problemem i moja wizja zaczyna się rozmywać! Próbowałem jednak użyć klas niejawnych, niezależnie od tego, czy muszą analizować obiektynie ma użyłem powiązanej właściwości i nie mogę znaleźć sposobu, czy muszą „konsumować” właściwość, usuwając ją z dostępnej właściwości obiektu, i ponownie nie mogę znaleźć sposobu.

Obecnie szukam w API refleksji, ale dla mnie jest to wciąż trochę niejasne.

Pomoc będzie mile widziana! =)

questionAnswers(2)

yourAnswerToTheQuestion