Проблема с синтаксисом Scala - PullRequest
0 голосов
/ 25 мая 2011

Следующий код может быть скомпилирован

  def isEven(a:Int)=
    if (a%2==0) true else false

  def main(args: Array[String]) {
        List(1, 10) filter isEven foreach println

, но если я перейду к следующему (Список (1,10) -> Список (1-10))

def isEven(a:Int)=
    if (a%2==0) true else false

  def main(args: Array[String]) {
        List(1 to 10) filter isEven foreach println
   }

В чем разница между списком (1,10) и списком (от 1 до 10)?

Ответы [ 3 ]

5 голосов
/ 25 мая 2011

List(1, 2) - это просто список с двумя Int элементами: 1 и 2. Выражение 1 to 10 создает экземпляр Range, поэтому List(1 to 10) - это список с одним элементом: a Range.

3 голосов
/ 25 мая 2011

Пропущенный фактор - это правильно, так что это всего лишь дополнение.

Если вы хотите List[Int] с номерами от 1 до 10, вы можете написать

List(1 to 10:_*)

или

1 to 10 toList
3 голосов
/ 25 мая 2011

List(1, 10) - это List[Int], тогда как List(1 to 10) - это List[Range]. Обратите внимание на типы в следующем сеансе REPL:

scala> 1 to 10
res3: scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne = Range(1, 2, 3, 4, 5, 6, 7
, 8, 9, 10)

scala> List(1 to 10)
res4: List[scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne] = List(Range(1, 2, 3,
 4, 5, 6, 7, 8, 9, 10))

scala> List(1, 10)
res5: List[Int] = List(1, 10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...