小编gia*_*olo的帖子

如何将X => Option [R]转换为PartialFunction [X,R]

只要我们有一个PartialFunction[X,R]很容易将它转换为返回的函数Option[R],例如

def pfToOptf[X, R](f: PartialFunction[X,R])(x: X) =
    if (f.isDefinedAt(x)) Some(f(x))
    else None
Run Code Online (Sandbox Code Playgroud)

但是,如果任务相反,那该怎么办:假设我有一个函数作为参数f获取X并返回Option[R]结果.我想做出一个PartialFunction[X,R].什么是最好的方法?

我想出来的东西看起来很丑陋我的口味:

def optfToPf[X,R](f: X => Option[R]) : PartialFunction[X,R] = {
    object extractor {
        def unapply(x: X): Option[R] = f(x)
    }

    { case extractor(r) => r }
}
Run Code Online (Sandbox Code Playgroud)

我错过了一些更好的方法吗?

scala partialfunction scala-option

22
推荐指数
3
解决办法
2588
查看次数

在Cassandra术语中,什么是TimeUUID?

在Cassandra术语中,TimeUUID它是什么时候使用的?

cassandra timeuuid

21
推荐指数
2
解决办法
1万
查看次数

Scala:进行隐式转换A-> B适用于选项[A] - >选项[B]

我正在尝试编写一个函数,当它们以通用方式包装在Option中时,重用我对Object A - > Object B的隐式转换,以便Option [A] - > Option [B]转换也工作.

我想出的是:

implicit def fromOptionToOption[A, B](from: Option[A])(implicit conversion: (A) => B): Option[B] = from.map(conversion(_))
Run Code Online (Sandbox Code Playgroud)

当我将一个(..)分配给一个值而不是当我分配一个Option val时,这是有效的; 请参阅以下控制台输出:

scala> trait T
defined trait T

scala> case class Foo(i: Int) extends T
defined class Foo

scala> case class Bar(i: Int) extends T
defined class Bar

scala> implicit def fromFooToBar(f: Foo):Bar = Bar(f.i)
fromFooToBar: (f: Foo)Bar

scala> implicit def fromBarToFoo(b: Bar):Foo = Foo(b.i)
fromBarToFoo: (b: Bar)Foo

scala> implicit def fromOptionToOption[A, B](from: Option[A])(implicit conversion: …
Run Code Online (Sandbox Code Playgroud)

scala scala-option

21
推荐指数
2
解决办法
4058
查看次数

在Scala中,是否存在用于将异常转换为选项的预先存在的库函数?

这基本上是为了包装java工厂方法,如果无法根据输入创建项目,则抛出异常.我正在寻找基础库中的东西,如:

 def exceptionToOption[A](f: => A):Option[A] ={
    try{
      Some(f)}
    catch{
      case e:Exception => None}
  }
Run Code Online (Sandbox Code Playgroud)

用法:

val id:Option[UUID] = exceptionToOption(UUID.fromString("this will produce None"))
Run Code Online (Sandbox Code Playgroud)

我知道我可以自己写,但我想检查一下,我不是在重新发明轮子.

scala scala-option

20
推荐指数
3
解决办法
3006
查看次数

如何(最好)将选项转换为试用?

如何(最好)将方法调用返回的选项转换为Try(优先级,尽管Either或scalaz \/甚至验证可能没问题),包括在适当的情况下指定Failure值?

例如,我有以下代码,感觉很笨,但至少做(大部分)工作:

import scala.util._

case class ARef(value: String)
case class BRef(value: String)
case class A(ref: ARef, bRef: BRef)
class MismatchException(msg: String) extends RuntimeException(msg)

trait MyTry {

  // Given:
  val validBRefs: List[BRef]

  // Want to go from an Option[A] (obtained, eg., via a function call passing a provided ARef)
  // to a Try[BRef], where the b-ref needs to be checked against the above list of BRefs or fail:

  def getValidBRefForReferencedA(aRef: ARef): Try[BRef] = {

    val abRef = for { …
Run Code Online (Sandbox Code Playgroud)

scala scala-option

19
推荐指数
4
解决办法
1万
查看次数

将2个选项合并为1

Scala中是否存在预定义函数x,它将2个选项组合在一起

Some(a) x None => Some(a)
None x Some(b) => Some(b)
None x None => None
Run Code Online (Sandbox Code Playgroud)

scala scala-option

18
推荐指数
1
解决办法
6816
查看次数

Scala创建List [Int]

如何快速创建一个List[Int]包含1到100的内容?

我试过了List(0 to 100),但它回来了List[Range.Inclusive]

谢谢

scala scala-collections

17
推荐指数
2
解决办法
1万
查看次数

为什么Option不直接扩展Iterable特征?

Option可以隐式转换为Iterable- 但为什么它不只是直接实现Iterable:

def iterator = new Iterator[A] {
  var end = !isDefined
  def next() = {
    val n = if (end) throw new NoSuchElementException() else get
    end = true
    n
  }

  def hasNext = !end
}
Run Code Online (Sandbox Code Playgroud)

编辑: 事实上它甚至比那更糟糕,因为在2.8 Option中声明了一个iterator方法:

def iterator: Iterator[A] = 
  if (isEmpty) Iterator.empty else Iterator.single(this.get)
Run Code Online (Sandbox Code Playgroud)

scala implicit-conversion scala-collections scala-option

17
推荐指数
1
解决办法
1446
查看次数

如何使用PlistBuddy访问其属性指定的PreferencesS元素?

目前我正在使用此代码

  /usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" "Test/Settings.bundle/Root.plist"
Run Code Online (Sandbox Code Playgroud)

在构建阶段的脚本部分中,将产品版本放在应用程序设置的只读字段中.该字段具有首选项数组的位置1(从0开始).

我问是否有可能使用更强大的1来访问该字段,因为我或其他开发人员在开发过程中可能会意外地改变位置.

我可以访问该元素,指定它的标识符,无论其位置如何?

为了更好地解释我的需求,我写下了一个例子.我需要把像1.2.345进入string第2节点dictarray即我需要从改变0.0.01.2.345.是否可以访问dict节点而不说明它是数组中的第二个?我要求在PlistBuddy中使用类似于xpath表达式的东西(如果有的话).

<?xml version="1.0" encoding="UTF-8"?>
<dict>
<key>PreferenceSpecifiers</key>
<array>
    <dict>
        <key>Title</key>
        <string>Application info</string>
        <key>Type</key>
        <string>PSGroupSpecifier</string>
    </dict>
    <dict>
        <key>DefaultValue</key>
        <string>0.0.0</string>
        <key>Key</key>
        <string>version</string>
        <key>Title</key>
        <string>Version</string>
        <key>Type</key>
        <string>PSTitleValueSpecifier</string>
    </dict>
    <dict>
        <key>DefaultValue</key>
        <string>0</string>
        <key>Key</key>
        <string>build</string>
        <key>Title</key>
        <string>Build</string>
        <key>Type</key>
        <string>PSTitleValueSpecifier</string>
    </dict>
         ...
Run Code Online (Sandbox Code Playgroud)

xcode plist

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

scala返回第一个列表中的一些

我有一个列表l:List[T1],目前我正在做以下事情:

myfun : T1 -> Option[T2]
val x: Option[T2] = l.map{ myfun(l) }.flatten.find(_=>true)
Run Code Online (Sandbox Code Playgroud)

myfun函数返回None或Some,flatten抛弃所有None,并且find返回列表的第一个元素(如果有的话).

这对我来说似乎有些苛刻.我认为可能存在一些理解或类似的东西会减少浪费或更聪明.例如:我不需要如有后续的答案myfun返回任何 Somemap列表中l.

functional-programming scala list scala-option

14
推荐指数
1
解决办法
4434
查看次数