Да, это скомпилируется ...
val up = Enhancer(c).a //up: String = A
... но тогда, то же самое будет ...
val up = Enhancer(c).wxyz //up: String = ""
Если класс C
не имеет член a
, а класс Enhancer
не имеет члена a
, компилятор не будет проверять, поддерживается ли a
динамически, потому что все поддерживается динамически.
Если я проектировал язык / компилятор, и мне приходилось выбирать между разрешением a.anything
(потому что Enhancer
означает Dynamic
) или разрешением только членов с естественной поддержкой (игнорируя динамику), я думаю, что ' д go с последним.