Значение типа Set = Int => Boolean в Scala

Я не понимаю, почему Set определенный таким образом, дает эти результаты.

насколько я понимаю, это Set - это просто функция, которая принимает int и возвращает boolean.

может кто-нибудь объяснить мне, почему я получаю этот результат с помощью set?

Я думаю, что это короткий способ выразить функцию в Scala, но я новичок в этом языке, и я не понимаю, как это работает.

object sets {
  type Set = Int => Boolean

    var a=Set(3)                              //> a  : scala.collection.immutable.Set[Int] = Set(3)
    a(2)                                      //> res0: Boolean = false
    a(3)                                      //> res1: Boolean = true
    a(1)                                      //> res2: Boolean = false
}

2 ответов


тип, который вы определили в type Set = Int => Boolean и объект, который вы создали в var a=Set(3) на самом деле не связаны друг с другом. Даже это работает:

scala> type Set = String
defined type alias Set

scala> val a = Set(3)
a: scala.collection.immutable.Set[Int] = Set(3)

когда вы называете Set(3), вы называете apply метод объект Set. Если добавить new ключевое слово, оно будет учитывать ваш псевдоним типа:

scala> val b = new Set()
b: String = ""

a(2), a(3), a(1) работы за Set[A] на самом деле, реализует


Я согласен, что сказал izstas это разные вещи. Но" Type Set = Int => Boolean " имеет эффект. В следующих шагах в консоли scala после "Type Set = Int => Boolean" ошибка исчезает.

scala> def func(s:Set) = 1
<console>:10: error: type Set takes type parameters
       def func(s:Set) = 1
                  ^

scala> def func(s:Set[Int]) = 1
func: (s: Set[Int])Int                      <---- specify the type in the set

scala> type Set = Int => Boolean             
defined type alias Set

scala> def func(s:Set) = 1                   <---- no error
func: (s: Set)Int

scala> def getSet(s:Set) = s
getSet: (s: Set)Set

scala> getSet(Set(1,2))
res0: Set = Set(1, 2)

scala> Set(1,2)
res1: scala.collection.immutable.Set[Int] = Set(1, 2)

scala> val t=Set(1,2)
t: scala.collection.immutable.Set[Int] = Set(1, 2)