Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala元组类型组合_Scala_Types - Fatal编程技术网

scala元组类型组合

scala元组类型组合,scala,types,Scala,Types,给定一个元组类型 type T = (String, Int, String) 有没有办法得到一个T1类型,T1应该是什么 type T1 = (MyClass, String, Int, String) 我希望能够像这样声明一个类 class TupleTypes[T] extends AnotherClass[T1] 注意:元组大小未知且 type T1 = (MyClass, T) 不会返回我想要的,它将返回(MyClass,(String,Int,String))这是不同的 谢谢

给定一个元组类型

type T = (String, Int, String)
有没有办法得到一个T1类型,T1应该是什么

type T1 = (MyClass, String, Int, String)
我希望能够像这样声明一个类

class TupleTypes[T] extends AnotherClass[T1]
注意:元组大小未知且

type T1 = (MyClass, T)
不会返回我想要的,它将返回(MyClass,(String,Int,String))这是不同的


谢谢

在我看来,元组没有这样的构造,但是HList的行为与您展示的行为非常相似。它们被认为具有高级类型的编程结构,根据您想要实现的目标,使用起来可能会很困难。下面是一个和一个。

您可以使用
HList
到元组的转换从


迟到,但如果您正在寻找有关ScalaQuery问题的“更好”解决方案,请尝试以下方法:

1) 创建ID为的映射器基类

import org.scalaquery.ql.extended.{ExtendedTable => Table}

abstract class Mapper[T](table: String) extends Table[T](None, table) {
  def id = column[Int]("id", O PrimaryKey)
}
2) 使用case类/伴生对象扩展映射器库(即不基于元组)

然后,您可以执行以下操作:

def show: List[Foo] = {
  val q = (for { f <- Foos } yield f)

  val foos = db withSession {
    foos.list map { case t:T => t }
  }
  render(foos)
}
def显示:列表[Foo]={
val q=(对于{f t}
}
渲染(foos)
}
并且有一个可导航的对象(与基于索引的元组相比)

现在,当您只需要一组实体中的字段子集时,有时您不需要一个庞大的对象图

这就是投影的用武之地,只需创建一个case类,该类表示所需的字段集,然后创建一个可导航投影对象:

case class Yum (foo: String, baz: String)

def show: List[Yum] = {
  val q = (for { f <- Foos; b <- Bars; if f.id is b.fooID } yield (f.foo, b.baz))

  val yums = db withSession {
    yums.list map { case t:T => t }
  }
  render(yums)
}
case类Yum(foo:String,baz:String)
def显示:列表[Yum]={

val q=(对于{f感谢迈尔斯,非常有趣。问题是如何获取t2的类型并将其用于类定义?就像上面的示例
class TupleTypes[T]扩展了另一个类[T1]
还有什么方法可以得到T1吗?你能给我一些你打算添加到
TupleTypes
AnotherClass
中的成员的一般形状的例子吗?你能不能说你是否需要在
T
T1
之间建立某种有用的关系(即,您是否需要能够构造类型为
T1
的值以及类型为
MyClass
T
的给定值,或者反之亦然)?您好,迈尔斯,我感谢您的帮助。我正在使用scalaquery,我想创建一个具有Long(id)类型列的抽象基类。因此
TupleTypes[T]
实际上是
BaseTable[T]
。扩展
BaseTable[T]
的其他类将有一个列列表,类型
T
将是一个类似
(String,Int,Boolean,Date)
的元组
需要扩展scalaquery表并提供包含所有列类型的元组,
T1
必须是
(Long、String、Int、Boolean、Date)
。希望这能解释我想要实现的目标。
def show: List[Foo] = {
  val q = (for { f <- Foos } yield f)

  val foos = db withSession {
    foos.list map { case t:T => t }
  }
  render(foos)
}
case class Yum (foo: String, baz: String)

def show: List[Yum] = {
  val q = (for { f <- Foos; b <- Bars; if f.id is b.fooID } yield (f.foo, b.baz))

  val yums = db withSession {
    yums.list map { case t:T => t }
  }
  render(yums)
}