Tipo de encadenamiento de método seguro que no permite repeticiones de operaciones

Quiero implementar el encadenamiento de métodos como en esas preguntas:

Mejores prácticas para implementar el rasgo de Scala que admite el encadenamiento de métodos ;

Scala DSL: método de encadenamiento con métodos sin parámetros.

Sin embargo, quiero que una vez que se haya usado una "propiedad", ya no se pueda usar. Por ejemplo, supongamos que tengo una clase "Myclass" para la que quiero permitir el uso de la definición "foo" y la definición de "barra" como máximo una vez y no me importa el tipo de devolución final. Así:

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

¡Estoy luchando con este problema por un tiempo y mi visión comienza a ponerse borrosa! Intenté usar clases implícitas, sin embargo, si necesitan analizar objetos queno tiene usé la propiedad asociada, y no puedo encontrar cómo, si necesitan "consumir" la propiedad eliminándola de la propiedad disponible del objeto y, nuevamente, no puedo encontrar cómo.

Actualmente estoy buscando en la API de reflexión, pero todavía es un poco oscuro para mí.

¡La ayuda sería apreciada! =)

Respuestas a la pregunta(2)

Su respuesta a la pregunta