Scala новичок здесь. Я очень смущен тем, почему приведенный ниже код генерирует исключение. Я знаю, Function1[Int, Int]
имеет аннотация apply
метод типа Int => Int
, который необходимо определить. Не делает ли это ниже oddfunc
? Почему не x(3)
назвать конкретный метод apply
, определенный в oddfunc
?Как вы создаете реализацию абстрактного признака Function1
Welcome to Scala version 2.11.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_25).
Type in expressions to have them evaluated.
Type :help for more information.
scala> trait oddfunc extends Function1[Int,Int] {
| def apply(a: Int): Int = a+3
| }
defined trait oddfunc
scala> val x = new oddfunc{}
x: oddfunc = <function1>
scala> x(3)
java.lang.AbstractMethodError: $anon$1.apply$mcII$sp(I)I
at oddfunc$class.apply(<console>:8)
at $anon$1.apply(<console>:8)
... 43 elided
Это очень странно. При визуальном осмотре ваш код кажется прекрасным. Я вырезал и вставлял ваш точный код в свой REPL, и он работал отлично, как и ожидалось. – acjay
Возможно, это вещь для окружающей среды. На какой версии Scala вы работаете? Ява? – ntilwalli
2.11.0 и 1.7.0_25. Но ваш пример достаточно обычный, чтобы он действительно работал в любом месте. – acjay