Методы C++ являются частными и непереопределяемыми по умолчанию.
virtual
метод , Вы, возможно, обращаетесь к перегрузке?
В Predef есть функция идентификации .
l flatMap identity[Option[String]]
> List[String] = List(Hello, World)
Для выражения лучше, я полагаю:
for(x <- l; y <- x) yield y
Изменить:
Я попытался выяснить, почему параметр типа (Option [String]) необходим. Проблема, по-видимому, заключается в преобразовании типа из Option [T] в Iterable [T].
Если вы определяете функцию идентификации как:
l.flatMap( x => Option.option2Iterable(identity(x)))
, параметр типа можно опустить.
FWIW, в Scala 2.8 вы просто вызываете расплющить
на нем. Томас в основном использовал Scala 2.7. Он упустил только один альтернативный способ использования этой идентичности:
l.flatMap[String](identity)
Однако он не будет работать с обозначением операторов (похоже, что нотация операторов не принимает параметры типа, что полезно знать).
Вы можете также вызов сглаживание
в Scala 2.7 (по крайней мере, в List
), но он победил ' не уметь ничего делать без типа. Однако это работает:
l.flatten[String]
Вы могли бы просто немного помочь системе вывода типов:
scala> val l = List(Some("Hello"), None, Some("World"))
l: List[Option[java.lang.String]] = List(Some(Hello), None, Some(World))
scala> l.flatten[String]
res0: List[String] = List(Hello, World)