Параметры в scala и java - это то, с чем я борюсь, чтобы понять и работать. Я понимаю его там, чтобы устранить «нулевую» обработку ада. Честно говоря, я думаю, что он вводит другой вид ада!Параметры Scala и Java делают, если они есть, если не делают что-то другое.
Как я иметь дело с нулями в Java, чтобы сделать что-то вроде:
String test = null;
if(test==null) // do something
else // do something else
Такого рода решения является то, что я стремлюсь делать, когда я переключаюсь Options.
Но в классе Option в scala и java нет метода, чтобы сказать, если null что-то сделать, иначе сделайте что-нибудь еще.
Существует способ по умолчанию значения в случае предметного бытия нуля, например
//in scala
test.getOrElse("defaulted")
мне было интересно, почему не может быть методы, такие как неявный класс я написал в «салатном» а Вариант Scala
object Definitions{
implicit class OptionExtensions[$Data](option: Option[$Data]){
def perform (found: ($Data)=>Any, notFound:()=>Any): Any={
option match{
case Some(data)=> found(data)
case None=> notFound()
}
}
}
}
Пожалуйста, игнорируйте плохо названный метод. Но теперь с этим написано, я мог бы предположительно использовать вариант, как это:
import Definitions._
val test : Option[String] = None
var builder =new StringBuilder
test.perform(builder ++= _,()=>addError("not found"))
//or
println(test.perform(_.reverse,()=>{"something else"}))
def addError(error:String)={
println(error)
}
Вместо этого я вынужден написать матч и дело на что-либо делать с вариантами обработки. Я должен делать что-то неправильно. Скорее всего, мое понимание того, как использовать «Параметры», является ошибочным. Вышеупомянутый способ обработки по умолчанию не входит в класс Option по причине. Теперь, какова могла быть эта причина?
Использование 'Any' в качестве типа ваших методов (или параметров метода) приводит вас к настоящему аду (вы теряете всю мощь, предлагаемую системой типов). Тем не менее, самый идиоматический способ использования экземпляра 'Option' - рассматривать его как коллекцию или монаду и использовать' map', 'flatMap',' filter' или 'foreach'. – jarandaf
http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html Прокрутите вниз до «Сделать что-то, если значение присутствует» ... – Fildor
Scala уже имеет 'fold' для этого:' test.fold (addError ("not found")) (builder ++ = _) ' – Kolmar