Значение типа 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)