С канонической «Программирование в Scala» от Oderskey и Веннерсом:Почему isiomatic scala является явным/подробным о некоторых [x [/ Option [x]?
scala> val results = List(Some("apple"), None,
Some("orange"))
results: List[Option[java.lang.String]] = List(Some(apple),
None, Some(orange))
scala> for (Some(fruit) <- results) println(fruit)
apple
orange
Я не понимаю философию Скале навязать программисту необходимость явно указать некоторые (яблоко), в отличие от выводя его. Я бы предпочел, чтобы писать/увидеть следующее:
scala> val results = List("apple", None, "orange")
results: List[Option[java.lang.String]] = List(apple, None, orange)
scala> for (fruit <- results) println(fruit)
apple
orange
Или, может быть, по крайней мере следующее (при условии, набрав на уровне списка, но не на уровне отдельного элемента):
scala> val results :List[Option[String]] = ("apple", None, "orange")
results: List[Option[java.lang.String]] = List(apple, None, orange)
scala> for (fruit <- results) println(fruit)
apple
orange
По крайней мере, в этот последний случай: тип List предоставляется (чтобы помочь компилятору ..), но мы все же избегаем многословия «бокса» каждого элемента в списке, например Some («foo»).
Любой, кто лучше настроился на способ мышления Scala, может сказать мне, почему мне нужно делать это, чтобы набрать еще ...?
Редактировать: так что делает то, что я хочу для строк.
scala> implicit def toOpt(a : String) = Some(a)
toOpt: (a: String)Some[String]
scala> val myList : List[Option[String]] = List("first", None, "third")
myList: List[Option[String]] = List(Some(first), None, Some(third))
Если кто-то может показать, как обобщить приведенное выше, используя более высокие типы типов, я дам вам ответ.
Вы могли бы write 'for (fruit <- results.flatten) println (fruit)', если вам не нравится деконструкция шаблона. –
Моя «говядина» не с разложением рисунка, а с некоторыми («яблоко»), «Некоторые» («оранжевые») и т. Д. – javadba
Является ли результат «val»: List [Option [String]] = ... 'действительно что гораздо менее многословно? Я подозреваю, что язык был разработан в соответствии с этими строками, вам нужно было бы дать компилятору гораздо больше типов подсказок, чем сейчас. – Shadowlands