Способ написать это более кратким?Необходимо проверить, если число меньше 0 - PullRequest
1 голос
/ 21 декабря 2011
val total_breaks = //a random number

total_breaks match {
  case i if(i < 0) => chartTemplate.setAttribute("totalBreaks", 0)
  case _ => chartTemplate.setAttribute("totalBreaks", total_breaks)
}

Я думал, что в Scala есть функция, которая может сократить это. Я думал, что min сделал это, но я не думаю Не могу найти документацию по min, max и т. Д.

Что-то вроде total_breaks.min(0). Отображать 0, если меньше 0, если не отображать total_breaks.

Также есть способ сделать что-то подобное

(4 + 5) match {
  case 0 => println("test")
  case _ => println(_) //i need to display the number passed into match?  Is this not  possible?
}

Если я сделаю case i => println(i) это то же самое, что case _ =>? Это запасной вариант?

1 Ответ

9 голосов
/ 21 декабря 2011

Существуют методы min и max, определенные в GenTraversableOnce и, таким образом, доступные для последовательностей.Вы можете использовать их как:

scala> List(1, -4, 0).min
resN: -4

Также есть min и max, определенные в RichInt, которые работают как операторы для всего, что может быть преобразовано в RichInt, как правило, ваши ванильные целые числа:

scala> -4 min 0
resN: -4

Итак, если вам нужно что-то, что возвращает ваш номер, скажите x, если x больше 0 и 0 в противном случае, вы можете написать:

scala> x max 0

Это означает, что вы можете переписать сопоставление с образцом следующим образом:

chartTemplate.setAttribute("totalBreaks", total_breaks max 0)

Для вашего второго вопроса _ и i - это допустимые шаблоны, которые будут соответствовать чему угодно.Разница в том, что в первом случае вы не привязываете то, что вы сопоставили с переменной.Использование println(_) неправильно, хотя;как таковой, он соответствует анонимной функции, которая печатает свой первый аргумент.Поэтому, если вы не хотите повторять выражение (4 + 5), вам действительно следует написать свой шаблон и код в виде:

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