标签: scala-option

将AnyRef装入选项的方法在哪里?

詹姆斯·伊里的博文中,他写道:

另外,Scala有一个"选项"方法,可以将值提升为Some(value)或None,具体取决于它是否为null ...

我似乎无法option在scaladoc中的任何地方找到此方法.

Iulian Dragos的gdata客户端项目包含一个可能是James所指的方法.

def option[A <: AnyRef](a: A): Option[A] =
  if (a eq null) None else Some(a)
Run Code Online (Sandbox Code Playgroud)

请指出在scaladoc中我可以在哪里找到此方法.

PS我有一个看起来像这样的方法:

def permutations(s: String): List[String] = ...
Run Code Online (Sandbox Code Playgroud)

我有两个想法,我是否应该改为:

def permutations(s: Option[String]): List[String] = ...
Run Code Online (Sandbox Code Playgroud)

因为客户端可以调用它null.目前在第一个实例中,我希望使用option前面提到的方法手动将String参数&I框化.

scala scala-option

3
推荐指数
1
解决办法
863
查看次数

Scala:是唯一的选择吗?

对于潜在的运行时故障,如数据库查询,似乎必须使用某种形式Either[String, Option[T]]才能准确捕获以下结果:

  1. 一些(记录发现)
  2. 无(未找到记录)
  3. SQL异常

选项根本没有足够的选择.

我想我需要潜入scalaz,但是现在它是直的,除非我在上面遗漏了什么.

我自己已经被逼进一个角落,我的DAO实现,只能采用无论是写操作,但我现在看到的是一些要么写取决于期权读取(如检查,如果新用户注册存在的电子邮件),这是majorly不好赌博,使.

在我全力以赴之前,是否有人有替代解决方案来处理成功/失败/异常的运行时三连胜?

error-handling scala either scala-option

3
推荐指数
2
解决办法
1233
查看次数

Scala,崩溃选项的选项

我想知道是否有一个简短的手来折叠选项的地图.例如

def divideByThree(x:Int) = if (x == 0) None else Some(x/3)

val result = Some(6) map (divideByThree(_))
resut:Option[Option[Int]] = Some(Some(2))
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题我做了

val result = Some(6) match {
   case Some(i) => divideByThree(i)
   case None    => None
}
Run Code Online (Sandbox Code Playgroud)

这看起来有点沉重.我可以在Option上创建一个隐式函数map mapOption来解决这个问题,但我想知道是否有一种我没有想过的更好的方法.

scala scala-option

3
推荐指数
1
解决办法
428
查看次数

为什么Option扩展产品?

我必须遗漏一些东西,但我没有看到课堂上的特质productElement和特性的实现.productArityProductOption

所以有两个问题:

  1. 为什么要Option延长Product
  2. 怎么可能Option(或者它的两个子类中的任何一个)没有实现这两个方法?

scala scala-option

3
推荐指数
1
解决办法
225
查看次数

从 Scala 中的 Some 中提取字段

我知道 Some 对象可以是 None 或我传递的对象之一。鉴于它不是 None 的事实,从 Some 对象中提取字段的理想方法是什么?我制作了一个“At”类,它的字段之一是“日期”。由于 Some 类具有与 Product 特征的混合,因此以下工作正常:

(An object with return type Some(At)).productElement(0).asInstanceOf[At].date
Run Code Online (Sandbox Code Playgroud)

但是有没有一种理想的方法来做到这一点?

scala scala-option

3
推荐指数
1
解决办法
4038
查看次数

将Option中的值转换为另一种类型

我正在尝试做一些似乎应该在scala中具有直接语法/功能的东西.我只是不知道那是什么.我正在尝试将Option的包含值(如果它不是None)转换为另一种类型.

如果我想实现以下功能,我想知道代码是什么

def myFunc(inVal:Option[Double]):Option[BigDecimal] = {
    //Code I need goes here
}
Run Code Online (Sandbox Code Playgroud)

注意:我实际上并没有实现这个功能,它只是我演示我需要的最清晰的方式

scala scala-option

3
推荐指数
1
解决办法
2901
查看次数

使用带有清洁代码的选项

抱歉,如果这是一个新手问题...在Scala我明白当你有一个返回一个实例但可能没有返回任何东西的函数时,最好使用一个Option而不是返回null.我知道这使得它在安全性方面更好,因为你没有传递空引用,并冒着某种危险NullPointerException.

但是,有没有比使用模式匹配更清晰的方法来处理选项?我最终使用的语法如下:

val optObj : Option[MyObject] = myFunctionThatReturnsOption
optObj match {
  case Some(obj) => {
  //my code using obj
  }

  case None => _
}
Run Code Online (Sandbox Code Playgroud)

实际上,这一切都等同于Java版本:

MyObject obj = myMethodThatCanReturnNull()
if (obj != null) {
  //my code using obj
}
Run Code Online (Sandbox Code Playgroud)

在使用Option而不是null引用时,是否有其他方法可以避免Scala中的所有样板?我想做的就是执行一段代码,只要Option包含一些对象(即不是None).

scala scala-option

3
推荐指数
1
解决办法
160
查看次数

嵌套Scala选项字段的最佳实践?

我有许多嵌套对象,所有嵌套对象都包含在Scala Option类型中.在我的项目的其他地方,我不得不调用一个嵌入了5级深度的属性(其中一些是列表),每次调用.get.这样我最终得到的东西如下所示:

objectA.get.attrB.get.attrC.get(0).attrD.get
Run Code Online (Sandbox Code Playgroud)

除了一系列.get调用(我不确定是理想的)之外,我没有以这种方式实现很多错误处理,如果任何属性都是空的,那么整个事情就会崩溃.鉴于嵌套调用,如果我将其限制为如上所述的单行,我也只能.getOrElse在最后使用一次.

是否有任何建议的方法在Scala中使用Option类型?

scala scala-option

3
推荐指数
1
解决办法
466
查看次数

如何将scala中的序列转换/换行到Option [Seq],这样如果列表为空,则Option为None

我可以使用if语句执行此操作,但可能有一种"scala"方法可以执行此操作.

  def notScalaConv(in: Seq[String]): Option[Seq[String]] = {
    if (in.isEmpty)
      None
    else
      Option(in)
  }
Run Code Online (Sandbox Code Playgroud)

scala scala-option

3
推荐指数
1
解决办法
820
查看次数

Scala 应用无法返回选项

我最近尝试使用apply像工厂函数:

class X() {
    def apply() : Option[X] = if (condition) Some(new X()) else None
}

val x : Option[X] = X() // <- this does not work; type is mismatched
Run Code Online (Sandbox Code Playgroud)

出于某种原因apply 总是返回X。我需要创建一个Factory方法吗?

scala scala-option

3
推荐指数
1
解决办法
86
查看次数

标签 统计

scala ×10

scala-option ×10

either ×1

error-handling ×1