Хотя структурные типы являются альтернативой, они используют внутреннее отражение.
Что вы на самом деле хотите сделать, так это вызвать установщик некоторого свойства, чтобы вы могли обобщить его до вызова функции:
def applyWith4[X,Y](x: X)(f: X => Int => Y) = f(x)(4)
Этот метод принимает два аргумента: некоторый экземпляр X
и одну функцию f
, которая превращает ваш X
в функцию из Int
в некоторый тип Y
(в вашем случае это будет Unit
).
Теперь вы можете вызвать его, используя
applyWith4(em)(x => x.m = _)
или в более коротком, но менее читаемом варианте с использованием сгенерированного установщика m_=
:
applyWith4(em)(_ m_=)