我有一段代码(简化): import scala.concurrent.Future
case class BigCase(id: Int, v2: Int, v3: Int)
object Repo {
def insert(i: BigCase):Future[Int] = ???
val r = for {
id <- insert(BigCase(1,2,3))
} yield {
id
}
println(s"result: $r")
}
它工作正常,但是当我有一个包含15个字段的巨大“BigCase”类时,能够编写
会很好刀片(_)
,而不是
刀片(BigCase(1,2,3,4,5,6 ...))
,特别是在剔除阶段。但是一旦我做insert(_)
,id变成了“Nothing”类型,这使得进一步的步骤难以构成。
周围有办法吗?
答案 0 :(得分:1)
我不确定您的代码应该如何工作,但是您在理解中第一次定义了BigCase
实例。没有办法缩短声明本身,但我认为如果在for comprehension之前定义scala> import scala.concurrent.Future
import scala.concurrent.Future
scala> import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global
scala> def insert(bc: BigCase): Future[Int] = Future({Thread.sleep(1000); bc.id})
insert: (bc: BigCase)scala.concurrent.Future[Int]
scala> val myBC = BigCase(1,2,3)
myBC: BigCase = BigCase(1,2,3)
scala> val r = for {id <- insert(myBC)} yield id
r: scala.concurrent.Future[Int] = scala.concurrent.impl.Promise$DefaultPromise@53bd8fca
scala> r.onComplete(println)
Success(1)
实例,则代码更有意义:
crypto.js:73
this._handle.update(data, encoding);
^
TypeError: Data must be a string or a buffer
at TypeError (native)
at Hash.update (crypto.js:73:16)
at new WP_Auth (C:\xampp\htdocs\livetrader\chat\app-backend\wp-auth.js:27:6)
at Object.exports.create (C:\xampp\htdocs\livetrader\chat\app-backend\wp-auth.js:148:9)
at Object.<anonymous> (C:\xampp\htdocs\livetrader\chat\app-backend\socket.js:20:6)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
答案 1 :(得分:1)
假设我正确理解了这个问题,???: BigCase
将编译并在您想要BigCase
的任何地方工作。如果要在多个位置使用占位符,可以使用val bc: BigCase = ???
。
事实上,鉴于insert
的类型,insert(???)
应该已经正常工作,所以在此评论中你不清楚你的意思:
有点像调用insert(???),但仍然有编译器返回正确的返回类型
答案 2 :(得分:0)
如果你只想要任意的int字段,
scala> case class BigCase(ids: Int*)
defined class BigCase
scala> BigCase(1 to 3 : _*)
res3: BigCase = BigCase(Range 1 to 3)
然后稍后返回并修改字段数量?
或者,更随意,
scala> case class BigCase[A](ids: A)
defined class BigCase
scala> BigCase(1,2,3)
res7: BigCase[(Int, Int, Int)] = BigCase((1,2,3))
scala> BigCase(1,2,"three")
res8: BigCase[(Int, Int, String)] = BigCase((1,2,three))