Написать Java-программу для оценки Scala Homeworks - PullRequest
0 голосов
/ 21 марта 2011

Я ТА для класса программирования. Есть одно задание, в котором студенты должны написать Scala. Я не достаточно опытен в Scala, чтобы быстро прочитать его, чтобы убедиться, что программа работает или способна быстро написать скрипт в Scala для запуска тестовых входов.

Тем не менее, я очень способен на Java. Мне нужен совет по простому способу оценки заданий Scala, используя мои знания Java. Есть ли способ загрузить файл Scala в Java, чтобы у меня были простые методы Java для запуска тестовых входов для их программ? Мне известно о том, что они оба компилируются в байт-код Java, поэтому я считаю, что это должно быть возможно.

Ответы [ 5 ]

7 голосов
/ 22 марта 2011

Scala генерирует файлы классов.Файлы классов Scala могут быть запущены с java, требуя только, чтобы scala-library.jar был в пути к классам.Точка входа в программы Scala представляется Java как статический метод main для класса, как и в Java.Разница в том, что в программе Scala этот метод main является методом, объявленным для object.Например:

Java:

public class Test {
    public static void main(String[] args) {
    }
}

Scala:

object Test {
    def main(args: Array[String]) { 
    // or:
    // def main(args: Array[String]): Unit = { 
    }
}

Идея тестирования с помощью модульных тестов интересна, но, вероятно, приведет к неидиоматическомуСкала код.И, в некоторых редких случаях, может даже помешать написанию решения полностью на Scala.

Так что я думаю, что лучше просто указать аргументы командной строки, ввод (возможно, stdin) и вывод (stdout).Вы можете легко запустить его с помощью либо scala Test parms, либо java -cp /path/to/scala-library.jar Test parms.

. Тестирование ввода для отдельных функций может быть намного сложнее, так как для них могут потребоваться классы Scala в качестве входных данных, а некоторые из них могут бытьнемного сложно инициализировать из Java.Если вы пойдете по этому пути, вам, вероятно, придется задать еще много вопросов для решения конкретных задач.

Возможно, одной из альтернатив является использование выражений Scala из командной строки.Например, скажем, у вас есть этот код:

object Sum {
  def apply(xs: Seq[Int]) = xs reduceLeft (_ + _)
}

Его можно протестировать так же легко, как это:

dcs@ayanami:~/tmp$ scalac Sum.scala
dcs@ayanami:~/tmp$ scala -cp . -e 'println(Sum.apply(Seq(1, 2, 3)))'
6

Чтобы сделать то же самое с Java, вы должны написать код, подобный этому:

import scala.collection.Seq$;

public class JavaTest {
    static public void main(String[] args) {
        System.out.println(Sum.apply(Seq$.MODULE$.apply(scala.Predef.wrapIntArray(new int[] {1, 2, 3}))));
    }
}
6 голосов
/ 22 марта 2011

Когда вы помещаете файлы .class, сгенерированные кодом студента, в ваш путь к классу, вы можете просто вызывать методы, разработанные вашими студентами. С хорошей Java IDE у вас даже будет завершение кода.

Перефразируйте вопрос: предположим, у вас есть библиотека Java, которую нужно протестировать. Но у вас есть только файлы классов, а не исходный код. Как ты делаешь это? - Теперь точно так же и в случае со Scala. В некоторых случаях вам потребуется доступ к странным статическим переменным (таким как $MODULE), но это не должно быть помехой. Своим ответом Тобим указал вам правильное направление.

А если серьезно, какова может быть дидактическая ценность для студентов? Вы сможете только сказать им, правильно ли их программы поступают, но вы не можете указать им, какую именно ошибку они совершили и как ее исправить. Они уже сами узнают, правильны ли их программы. Когда они делают ошибки, просто сказать им, что они сделали что-то не так, не поможет им вообще. Вам нужно показать им, где именно была допущена ошибка в коде, и как ее исправить. Это единственный способ помочь им учиться.

Если это только одно задание, но не больше, возможно, вы сможете найти лучший способ. Может быть, вы можете пригласить другого студента, который является опытным в Scala, чтобы помочь вам с этим. Или, может быть, вы можете показать некоторые из ошибочных программ всему классу и начать обсуждение среди студентов, в ходе которого они сами узнают, что пошло не так и как это исправить. Разговор о коде таким образом может им очень помочь, и, если все сделано правильно, может стать ценным уроком. Потому что это отражает то, что они будут делать позже в деловой жизни. Там не будет проф, рассказывающий им, как исправить свои ошибки. Вместо этого им придется выяснить это вместе со своими коллегами. Так что, возможно, вы сможете превратить это отсутствие знаний с вашей стороны в возможность для ваших студентов.

3 голосов
/ 21 марта 2011

Вы можете скомпилировать Scala в файл .class (например, «scalac ./foo.scala») и запускать методы из вашей программы оценки Java.

Это может быть полезно: Как вывызывать объекты Scala из Java?

3 голосов
/ 21 марта 2011

Ну, вы можете написать модульные тесты (например, с помощью JUnit) перед заданием и попросить студентов написать программы, соответствующие тестам.Или вы можете декомпилировать scala в java (например, с JD-gui).

Но, если честно, если студенты собираются использовать scala только для этого конкретного задания, есть вероятность, что они в основном собираютсяпереводить прямо с Java на скала, написание идиоматического скала.В этом случае я уверен, что вы сможете легко понять Scala-код, так как он будет выглядеть почти так же, как Java ...

0 голосов
/ 21 марта 2011

Вы можете запускать

 scalac SomeProgram.scala
 scala SomeProgram input1

много времени в течение времени, которое потребовалось бы для написания java, которая запускает компиляцию scala и запуск сгенерированного байт-кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...