Scala ~>(波浪号大于)运算符
Posted
技术标签:
【中文标题】Scala ~>(波浪号大于)运算符【英文标题】:Scala ~> (tilde greater than) operator 【发布时间】:2012-04-22 13:52:38 【问题描述】:我有以下 scala 类定义(在论文中找到),建模类别:
trait Category[~>[_, _]]
def compose[A, B, C]
(f: B ~> C)
(g: A ~> B)
: A ~> C
def id[A]: A ~> A
谁能解释一下 Category 类型参数和方法返回类型中的 '~>' 是什么意思? 或将我引导到解释它的资源... 我是 Scala 的新手(来自 Java),如果这是 Scala 用户应该知道的,请原谅我...... 提前谢谢你
【问题讨论】:
【参考方案1】:~>
只是Category
类型参数的占位符名称。就像class Option[T]
中的T
。
此外,Scala 语法允许您将B ~> C
写为~>[B, C]
的简写。
如果你重命名它,也许事情会变得更清楚:
trait Category[Mapping[_, _]]
def compose[A, B, C](f: Mapping[B, C])(g: Mapping[A, B]): Mapping[A, C]
def id[A]: Mapping[A, A]
【讨论】:
现在更清楚了...我想我会习惯于随意使用奇怪的字符来命名事物(不像Java)。事实上,我认为 '~>' 意味着一些特别的东西,但它可以被任何东西代替,因为我理解正确..非常感谢你! 是的,这完全是任意的(当然,在 Scala 的标识符命名规则之内)。 顺便说一句:之所以选择“运算符”,即运算符字符而不是字母字符,是希望在范畴论领域〜>容易转化为“态射”(又名“映射”、“箭头”等)。通常你应该小心操作符。【参考方案2】:这在Akka streams 中也用作边缘运算符。
【讨论】:
以上是关于Scala ~>(波浪号大于)运算符的主要内容,如果未能解决你的问题,请参考以下文章