鉴于以下ADT
sealed abstract class GroupRepository(val `type`: String) {
def name: String
def repositories: Seq[String]
def blobstore: String
}
case class DockerGroup(name: String, repositories: Seq[String], blobstore: String = "default") extends GroupRepository("docker")
case class BowerGroup(name: String, repositories: Seq[String], blobstore: String = "default") extends GroupRepository("bower")
case class MavenGroup(name: String, repositories: Seq[String], blobstore: String = "default") extends GroupRepository("maven")
Run Code Online (Sandbox Code Playgroud)
其中值type用于解码要实例化的实例.
如何自动(或半自动)派生编码器和解码器,我得到以下行为:
> println(MavenGroup("test", Seq("a", "b")).asJson.spaces2)
{
"type" : "maven",
"name" : "test",
"repositories" : [
"a",
"b"
],
"blobstore" : "default"
}
> …Run Code Online (Sandbox Code Playgroud) 鉴于:
abstract class Quantity[A <: Quantity[A]]
sealed trait UnitOfMeasure[A]
class Time extends Quantity[Time]
object Minutes extends UnitOfMeasure[Time]
class PowerRamp extends Quantity[PowerRamp]
object KilowattsPerHour extends UnitOfMeasure[PowerRamp]
type Test[X <: UnitOfMeasure[?]] = X match
case UnitOfMeasure[t] => t
Run Code Online (Sandbox Code Playgroud)
编译如下:
summon[Test[Minutes.type] =:= Time]
summon[Test[KilowattsPerHour.type] =:= PowerRamp]
Run Code Online (Sandbox Code Playgroud)
但是,如果UnitOfMeasure声明了trait :
sealed trait UnitOfMeasure[A <: Quantity[A]]
Run Code Online (Sandbox Code Playgroud)
两次传票都失败:
Cannot prove that Test[Minutes.type] =:= Time.
Note: a match type could not be fully reduced:
trying to reduce Test[Minutes.type]
failed since selector Minutes.type
matches none of the …Run Code Online (Sandbox Code Playgroud) 安装Visual Studio 2010 Professional时,我只选择以下项目:

但是,安装完成后,我看到我的计算机上装满了我不想要的软件,例如:
有没有办法安装Visual Studio没有所有这些"额外"?
例如,想象您有以下内容:
import play.api.data._
import play.api.data.Forms._
case class TestDomainClass(text: String, number: Int, date: DateTime, long: Long, boolean: Boolean)
val testForm = Form(
mapping(
"textField" -> text,
"numberField" -> number,
"dateField" -> jodaDate,
"longField" -> longNumber,
"booleanField" -> boolean
)(TestDomainClass.apply)(TestDomainClass.unapply)
)
Run Code Online (Sandbox Code Playgroud)
我的目标是在每个字段的参数类型上进行模式匹配.例如:对于textField参数类型将是String,并且对于dateField将是org.joda.time.DateTime.
def typeOfMappingUsingTypeTag[T: TypeTag](m: Mapping[T]) = typeOf[T] match {
case t if t =:= typeOf[String] => println("type is String")
case t if t =:= typeOf[Int] => println("type is Int")
case t if …Run Code Online (Sandbox Code Playgroud) 给定以下枚举:
enum Connector:
case CHAdeMO
case Mennekes
case CCS
case Tesla
Run Code Online (Sandbox Code Playgroud)
是否有类似Map[ConnectorType, Int]但会产生编译错误的类型:
Map(
Connector.CHAdeMO -> 1,
Connector.Mennekes -> 2,
Connector.CCS -> 3,
)
Run Code Online (Sandbox Code Playgroud)
也就是说,地图不包含 的键Connector.Tesla。换句话说,在编译时,类型应该类似于((Connector.CHAdeMO, Int), (Connector.Mennekes, Int), (Connector.CCS, Int), (Connector.Tesla, Int))常规 Map,但在其他方面表现得像常规 Map。
使用镜像在 Scala 3 中执行类型类派生时,是否有一种干净的方法来访问案例类字段的默认值?例如:
case class Foo(s: String = "bar", i: Int, d: Double = Math.PI)
Run Code Online (Sandbox Code Playgroud)
Mirror.Product.MirroredElemLabels将被设置为("s", "i", "d")。有没有类似的东西:(Some["bar"], None, Some[3.141592653589793])?
如果不能,这可以使用宏来实现吗?我可以同时使用镜像和宏来派生类型类实例吗?
使用 tagless final(不使用 IO,而是使用通用 F)我如何抽象出这样的东西:
def doSomething(s: String): IO[Unit] = ???
List("authMethods", "secretEngines", "plugins", "CAs", "common").parTraverse(doSomething)
Run Code Online (Sandbox Code Playgroud)
我能得到的最接近的是parTraverseN从 Concurrent 对象中使用,但我认为这将并发运行而不是并行运行(如在parallelism 中)。这也迫使我选择一个nwhere as parTraversenot。
列表的大小只是一个例子,它可能更大。doSomething是一个纯函数,它的多次执行可以毫无问题地并行运行。
理想情况下,鉴于doSomething返回,IO[Unit]我想抽象parTraverse_为F具有正确类型类实例的 。
给出以下代码:
implicit class RichString(s: String) {
def ! = ()
}
case class SomeClass(i: Int, s: String, id: Long)
Run Code Online (Sandbox Code Playgroud)
为什么这样:
"some string" !! SomeClass(5, "test", _)
Run Code Online (Sandbox Code Playgroud)
不编译,抛出以下错误:
Missing parameter type for expanded function ((x$1) => "some string".$bang$bang(SomeClass(5, "test", x$1)))
"some string" !! SomeClass(5, "test", _)
^
Type mismatch;
found : cmd1.SomeClass
required: Long => cmd1.SomeClass "some string" !! SomeClass(5, "test", _)
Run Code Online (Sandbox Code Playgroud)
但所有这些都编译得很好:
val f = SomeClass(5, "test", _)
"some string" !! f
"some string" !! ( SomeClass(5, …Run Code Online (Sandbox Code Playgroud) 在 Scala 2.12 中,这些选项之间有什么区别:
-Xlint:adapted-args 对比 -Ywarn-adapted-args-Xlint:nullary-unit 对比 -Ywarn-nullary-unit-Xlint:inaccessible 对比 -Ywarn-inaccessible-Xlint:nullary-override 对比 -Ywarn-nullary-override-Xlint:infer-any 对比 -Ywarn-infer-any如果不是,使用哪个更有意义?我也用fatal-warnings, 和几乎所有-Ywarn和-Xlint选项进行编译。
鉴于:
abstract class Databases[F[_]]
Run Code Online (Sandbox Code Playgroud)
我怎样才能使这个特性起作用:
// Marker trait signalling the database plugin supports StaticRoles
trait StaticRoles { this: Databases[_] => }
Run Code Online (Sandbox Code Playgroud)
我想确保StaticRoles只混合在也扩展的类中Databases,但是我不关心类型参数的具体值F。
代码返回:
error: _$1 takes no type parameters, expected: one
Run Code Online (Sandbox Code Playgroud)
这是公平的,但是它返回相同的错误:
trait StaticRoles { this: Databases[_[_]] => }
Run Code Online (Sandbox Code Playgroud)
我也试过:
trait StaticRoles { this: Databases[({type T[X[_]]})#T] => }
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
error: kinds of the type arguments (AnyRef{type T[X[_]]}#T) do not conform to the expected kinds of the type parameters (type F) in class Databases.
AnyRef{type …Run Code Online (Sandbox Code Playgroud)