0
Когда я запускаю следующий код, я получаю ошибку:Scala, Карринг по частичному параметру функции и неявного параметр
Error:(15, 25) missing parameter type for expanded function
The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: ?
testFuture onComplete({
^
код:
object TestFuture extends App{
val exe = ExecutionContext.fromExecutor(Executors.newCachedThreadPool())
testFuture onComplete({
case Success((str,i)) =>{
println(str,i)
}
case Failure(e) =>{
e.printStackTrace()
}})(exe)
println(Runtime.getRuntime.availableProcessors())
Thread.sleep(2000)
def testFuture:Future[(String,Int)] = Future[(String,Int)] {
Thread.sleep(1000)
("oh my sky",12)
}(exe)
}
Когда я декорировать «VAL ех» с ' неявным "и вызывать функцию currying без явного использования 'exe', как следующий код, он идет правильно. Можешь мне сказать почему?
object TestFuture extends App{
implicit val exe = ExecutionContext.fromExecutor(Executors.newCachedThreadPool())
testFuture onComplete({
case Success((str,i)) =>{
println(str,i)
}
case Failure(e) =>{
e.printStackTrace()
}})
println(Runtime.getRuntime.availableProcessors())
Thread.sleep(2000)
def testFuture:Future[(String,Int)] = Future[(String,Int)] {
Thread.sleep(1000)
("oh my sky",12)
}
}
Да, вы правы. Когда я изменяю свой код, как вы сказали, все идет правильно. Но не могли бы вы рассказать мне причину, не то ли «пространство» и «точка-нотация» в Scala? – muou0213
Нет, существуют некоторые естественные ограничения для нотации infix. См. Https://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html#function-applications, https://www.scala-lang.org/files/archive/spec/2.11 /06-expressions.html#infix-operations. 'Infix' не принимает аргументов. Это единое выражение, которое принято. (См. Также http://stackoverflow.com/questions/1181533/what-are-the-precise-rules-for-when-you-can-omit-parenthesis-dots-braces-f, и http: // docs.scala-lang.org/style/method-invocation.html) –