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 ~>(波浪号大于)运算符的主要内容,如果未能解决你的问题,请参考以下文章

〜位运算符(波浪号)的功能是啥[重复]

正则表达式中的波浪号运算符

C中的波浪号运算符

等号后面的波浪号有啥作用? [复制]

CSS 中'~'(波浪号),','(逗号),'+'(加号)和'>'(大于号)的作用

~~(“双波浪号”)在 Javascript 中做了啥?