У Scala есть защита?

Я начал изучать scala несколько дней назад и при изучении этого, я сравниваю его с другими языками функционального программирования как (Haskell, Erlang), с которым у меня было некоторое знакомство. Scala имеет защитные последовательности в наличии?

Я прошел сопоставление с образцом в Scala, но являюсь там любым понятием, эквивалентным защите с otherwise и все?

44
задан Cory Klein 18 November 2014 в 16:55
поделиться

3 ответа

Да, используется ключевое слово if . Из раздела Case Classes A Tour of Scala, внизу:

def isIdentityFun(term: Term): Boolean = term match {
  case Fun(x, Var(y)) if x == y => true
  case _ => false
}

(Это не упоминается на странице Pattern Matching , возможно, потому, что Tour такой быстрый обзор.)


В Haskell, иначе на самом деле просто переменная, привязанная к True . Так что это не добавляет силы концепции сопоставления с образцом. Вы можете получить его, просто повторив свой первоначальный шаблон без защиты:

// if this is your guarded match
  case Fun(x, Var(y)) if x == y => true
// and this is your 'otherwise' match
  case Fun(x, Var(y)) if true => false
// you could just write this:
  case Fun(x, Var(y)) => false
54
ответ дан 26 November 2019 в 22:03
поделиться

Azure обрабатывает балансировку нагрузки для табличного места хранения и SQL Azure, распределяя трафик между настроенными экземплярами.

Для таких вещей, как состояние сеанса с традиционным приложением asp.net, данные сеанса будут храниться в таблице места хранения, которая затем будет доступна для всех экземпляров webrole. Об этом говорится здесь .

Windows Azure обеспечивает балансировку нагрузки для каждой открытой конечной точки, позволяя масштабировать приложение до любого количества экземпляров. Необходимо убедиться, что приложение не имеет состояния (или хранит состояние в общей области в разных экземплярах, таких как blobs или таблицы). Единственными конечными точками, не сбалансированными по нагрузке, являются внутренние конечные точки. Таким образом, если вы выполняете какой-то тип межролевой связи, например, от веб-роли до одного из нескольких экземпляров рабочих ролей, размещающих службу wcf на внутренней конечной точке, вам придется обрабатывать балансировку нагрузки между этими экземплярами.

-121--2147954-

Да, используется ключевое слово , если . Из раздела Case Classes Экскурсии по Скале, расположенного внизу:

def isIdentityFun(term: Term): Boolean = term match {
  case Fun(x, Var(y)) if x == y => true
  case _ => false
}

(Это не упоминается на странице Образцов Matching , возможно, потому, что Экскурсия - это такой быстрый обзор.)


В Haskell, в противном случае является просто переменной, связанной с True . Таким образом, это не добавляет никакой силы к концепции сопоставления образцов. Вы можете получить его, просто повторив свой первоначальный образец без охраны:

// if this is your guarded match
  case Fun(x, Var(y)) if x == y => true
// and this is your 'otherwise' match
  case Fun(x, Var(y)) if true => false
// you could just write this:
  case Fun(x, Var(y)) => false
-121--1129259-

Да, есть стражи. Они используются так:

def boundedInt(min:Int, max: Int): Int => Int = {
  case n if n>max => max
  case n if n<min => min
  case n => n
}

Обратите внимание, что вместо в противном случае -клаузы вы просто указываете образец без охраны.

19
ответ дан 26 November 2019 в 22:03
поделиться

Простой ответ - нет. Это не совсем то, что вы ищете (точное соответствие синтаксису Haskell). Вы могли бы использовать оператор «match» в Scala с защитой и указать подстановочный знак, например:

num match {
    case 0 => "Zero"
    case n if n > -1 =>"Positive number"
    case _ => "Negative number"
}
9
ответ дан 26 November 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: