加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用元组定义函数

发布时间:2020-12-16 10:08:03 所属栏目:安全 来源:网络整理
导读:如何定义一个接受所有元组(1到22)作为参数的函数,我有以下内容: def foo (v=Tuple) =...foo((1,2))foo((1,2,3)) 编辑: 回答评论:我实际上是在尝试创建一个Tensor类,它是一组值和一组索引.指数可以是协变的和/或逆变的(参见Wikipedia1和Wikipedia2).我希望
如何定义一个接受所有元组(1到22)作为参数的函数,我有以下内容:

def foo (v=Tuple) =...

foo((1,2))
foo((1,2,3))

编辑:

回答评论:我实际上是在尝试创建一个Tensor类,它是一组值和一组索引.指数可以是协变的和/或逆变的(参见Wikipedia1和Wikipedia2).我希望有一个特殊的语法,如Tensor((1,2),(3,4),值),它将创建一个带有值的张量,两个具有长度(2,3)的协变指数和两个带有长度的逆变指数(3),4).所以使用这种语法我也可以编写Tensor((1,3),3,值)(带有隐式Int => Tuple1).

我同意Tuples不适合这个,更好地使用列表.但是语法不太好……

解决方法

没有专门针对元组的特性,但你可以使用类型类方法,as demonstrated in this answer.

如果您的目标确实是拥有List但允许调用者传入元组(为方便起见),您可以修改该解决方案,以便类型类生成List而不是Product.

简而言之,我们的想法是,您可以从调用者可以传递到您实际要使用的类型的类型中提供隐式转换:

def foo(x: IndexList) = x.indices

sealed case class IndexList(indices: List[Int])

object IndexList {
   implicit def val2indices(i: Int) = IndexList(List(i))
   implicit def tuple2toIndices(t: (Int,Int)): IndexList = 
      product2indices(t)
   // etc
   implicit def list2indices(l: List[Int]) = IndexList(l)

   private def product2indices(p: Product) = 
      IndexList(p.productIterator.toList.asInstanceOf[List[Int]])
}

然后,您可以使用您提供转换的任何类型调用您的方法:

foo(1)
foo((2,3))
foo(List(1,3))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读