Как я могу проверить функцию scala? - PullRequest
0 голосов
/ 15 мая 2019

Я начал изучать scala, и чтобы учиться, я хочу поиграть с некоторыми функциями.Однако я не знаю, как сделать так, чтобы возвращаемое значение функции отображалось на консоли.Я использую SBT.

Я пытался с return и Console.println, наверное, я не правильно его использую.

например:

def func(ls: List[Boolean]): Boolean = ls match 
    {
      case Nil => false
      case l::ls => l != func(ls)
    }

как мне увидеть, что возвращает эта функция?

Ответы [ 2 ]

5 голосов
/ 15 мая 2019

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

def func(ls: List[Boolean]): Boolean = ls match {
  case Nil => false
  case l::ls => l != func(ls)
}

func(List(true, false, true))

должен оценить func и показать результат встроенным, как это

func(List(true, false, true)) // false: Boolean

Также попробуйте println(func(List(true, false, true)))

Еще один способ проверить ожидаемый результат без необходимости его распечатки - использовать утверждения типа

assert(func(List(true, false, true)) == false)

Чтобы преобразовать приведенное выше утверждение в реальный модульный тест, мы могли бы создать приложение из шаблона Scala Giter8 примерно так

sbt new scala/scala-seed.g8

, которая устанавливает всю мебель, необходимую для быстрого запуска и тестирования приложений. Затем добавьте func к src/main/scala/example/Hello.scala примерно так

object Hello extends App {
  def func(ls: List[Boolean]): Boolean = ls match {
    case Nil => false
    case l::ls => l != func(ls)
  }
}

и добавьте соответствующие юнит-тесты к src/test/scala/example/HelloSpec.scala примерно так

class HelloSpec extends FlatSpec with Matchers {
  "func" should "return false on List(true, false, true)" in {
    Hello.func(List(true, false, true)) shouldEqual false
  }

  it should "return false on empty list" in {
    Hello.func(List()) shouldEqual false
  }

  // add further tests here
}

Теперь выполнение sbt test должно вывести

[info] HelloSpec:
[info] func
[info] - should return false on List(true, false, true)
[info] - should return false on empty list
[info] Run completed in 127 milliseconds.
[info] Total number of tests run: 2
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 2, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
3 голосов
/ 15 мая 2019

Вы можете попробовать это:

scala> :paste
// Entering paste mode (ctrl-D to finish)

def func(ls: List[Boolean]): Boolean = ls match
      {
        case Nil => false
        case l::ls => l != func(ls)
      }

// Exiting paste mode, now interpreting.

func: (ls: List[Boolean])Boolean

scala> func(List(true, false, true))
res0: Boolean = false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...