我是Scala的新手,我非常喜欢它,但有时候让我感到惊讶.例如:
clickedCallbacks: List[() => Unit])
Run Code Online (Sandbox Code Playgroud)
谁能告诉我Scala中的含义=>和() =>含义?
什么是最干净的方式map的Exception的失败Future在Scala呢?
说我有:
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
val f = Future {
if(math.random < 0.5) 1 else throw new Exception("Oh no")
}
Run Code Online (Sandbox Code Playgroud)
如果未来成功1,我想保留它,但是如果它失败了我想改变Exception到另一个Exception.
我能想出的最好的是变换,但是这需要我为成功案例制定一个不必要的功能:
val f2 = f.transform(s => s, cause => new Exception("Something went wrong", cause))
Run Code Online (Sandbox Code Playgroud)
有没有理由没有mapFailure(PartialFunction[Throwable,Throwable])?
我是mongodb的新手.我可以知道如何避免重复输入.在关系表中,我们使用主键来避免它.我可以知道如何使用java在Mongodb中指定它吗?
我需要查看Android应用程序从我的设备调用的页面.有没有像Fiddler或Wireshark这样的应用程序看看背后发生了什么?
如果是scala函数
def A(): Either[Exception, ArrayBuffer[Int]] = {
...
}
Run Code Online (Sandbox Code Playgroud)
什么应该是处理返回结果的正确方法?
val a = A()
和?
在Scala中,如何以编程方式使用查询字符串参数构建URL?
另外,如何将String包含查询字符串参数的URL 解析为允许我以编程方式编辑查询字符串参数的结构?
当调用?或ask在Akka Actor上时,Future[Any]返回a并且我必须通过显式转换future.mapTo[MyType].
我不喜欢失去这种类型的安全.如果我直接使用Futures(没有演员)我可以明确地返回Future[MyType]并保持类型安全.
我的具体用例涉及一个演员将其消息委托给两个子演员,然后汇总这些演员的结果并将其返回给父母的发件人.我父母的接收方法与Akka Docs中的这种方法类似:
http://doc.akka.io/docs/akka/2.0/scala/futures.html#For_Comprehensions
val f1 = actor1 ? msg
val f2 = actor2 ? msg
val f3 = for {
a ? f1.mapTo[Int]
b ? f2.mapTo[Int]
c ? ask(actor3, (a + b)).mapTo[Int]
} yield c
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现我的用例?
为什么andThen只存在Scala中的单个参数函数?
以下代码有效:
val double = (x: Int) => x * 2
val timesFour = double andThen double
Run Code Online (Sandbox Code Playgroud)
但为什么没有andThen多参数函数的方法呢?
val multiply = (x: Int, y: Int) => x * y
val multiplyAndDouble = multiply andThen double
<console>:10: error: value andThen is not a member of (Int, Int) => Int
Run Code Online (Sandbox Code Playgroud)
当然,添加这种方法是微不足道的.它是否有理由从标准库中省略?
我刚刚注意到以下内容很容易解决:
val double = (x: Int) => x * 2
val timesFour = double andThen double
Run Code Online (Sandbox Code Playgroud)
但我仍然想知道为什么andThen没有andThen
这个答案描述了如何scala.collection.breakOut用来防止创建浪费的中间集合.例如,这里我们创建一个中间件Seq[(String,String)]:
val m = List("A", "B", "C").map(x => x -> x).toMap
Run Code Online (Sandbox Code Playgroud)
通过使用breakOut我们可以阻止这个中间体的创建Seq:
val m: Map[String,String] = List("A", "B", "C").map(x => x -> x)(breakOut)
Run Code Online (Sandbox Code Playgroud)
视图解决了同样的问题,另外还有懒惰的访问元素:
val m = (List("A", "B", "C").view map (x => x -> x)).toMap
Run Code Online (Sandbox Code Playgroud)
我假设的创建View包装是相当便宜的,所以我的问题是:有没有使用任何真正的原因breakOut在ViewS'
我正在学习我大学的编程范例,并阅读讲师提供的这门课程材料:
val double = (x: Int) => 2 * x
double: Int => Int = <function1>
Run Code Online (Sandbox Code Playgroud)
但是从我自己的研究中我发现并习惯于定义相同的函数:
def d (x: Int) = 2 * x
d: (x: Int)Int
Run Code Online (Sandbox Code Playgroud)
我是Scala的新手.这两个定义都给出了以下结果:
res21: Int = 8
Run Code Online (Sandbox Code Playgroud)
在4作为参数传递时.现在我的主要问题是为什么讲师更喜欢val用来定义一个函数?我认为它更长,并不是真正必要的,除非使用val提供了一些我不知道的额外优势.除了我理解使用val使一些名称占位符所以稍后在程序中,我可能会错误地写val double = 5,功能将消失!在这个阶段,我非常确信我学会了一种更好的定义函数的方法,除非有人告诉我.
scala ×8
akka ×2
future ×2
actor ×1
android ×1
asynchronous ×1
dsl ×1
either ×1
fiddler ×1
function ×1
http-proxy ×1
java ×1
mongodb ×1
mongodb-java ×1
parsing ×1
proxy ×1
query-string ×1
scala-2.10 ×1
url ×1