Scalaでは、何をしますか
trait A <: B
平均?と同じですか
trait A extends B
?
追加するために編集:私は型パラメーターの構文と<:
、そのコンテキストでの意味に精通しています。A
ただし、上記の例では、タイプパラメータではなく、宣言されているトレイトの名前であるように思われます。
Scalaでは、何をしますか
trait A <: B
平均?と同じですか
trait A extends B
?
追加するために編集:私は型パラメーターの構文と<:
、そのコンテキストでの意味に精通しています。A
ただし、上記の例では、タイプパラメータではなく、宣言されているトレイトの名前であるように思われます。
注意Scala 2.12.5 以降、<:
forを使用することextends
は推奨されません
scala -deprecation -e 'trait B; trait A <: B'
/var/folders/0w/kb0d3rqn4zb9fcc91pxhgn8w0000gn/T/scalacmd2374381600671257557.scala:1: warning: Using `<:` for `extends` is deprecated
trait B; trait A <: B
^
one warning found
同じものにコンパイルされるようです。
~/code/scratch: scala -Xprint:typer -e 'trait B; trait A <: B'
// snip
abstract trait B extends scala.AnyRef;
abstract trait A extends java.lang.Object with this.B
~/code/scratch: scala -Xprint:typer -e 'trait B; trait A extends B'
// snip
abstract trait B extends scala.AnyRef;
abstract trait A extends java.lang.Object with this.B
仕様では、「5.3.3 Traits」でこれについて説明していません。しかし、構文の概要はこれについて言及しています。
TraitDef ::= id [TypeParamClause] TraitTemplateOpt
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody]
Extends ::= ‘extends’ | ‘<:’
更新r14632で導入されました。コンパイラ オプションを使用すると、提案された言語機能Virtual Traits-Xexperimental
で使用するために、トレイトを抽象としてマークします。がなければ、trait にのみ許可される 'extends' の同義語です。-Xexperimental
<: 構文は、仮想クラス (まだ実装されていません) で将来使用するために予約されています。
Scala Language Specificationを見ると、同じことを意味しているようです。trait の説明では、trait A extends B
構文についてのみ言及しています。しかし、Scala 構文の要約では、トレイト定義に and を同じ意味でextends
使用しています。<:
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody]
Extends ::= ‘extends’ | ‘<:’
はい、まあ、ほとんど、もう少し詳細についてはこの記事を参照してください。言語仕様から、次の定義がわかります。
タイプ間の2つの関係を定義します。
タイプの同等性T≡UTとUは、すべてのコンテキストで交換可能です。
適合性T<:UタイプTはタイプUに適合します。
編集:言語仕様を調べると、同じであるように見えます<:
。extends
特に、次のように定義されています。
ClassTemplateOpt ::= Extends ClassTemplate | [[Extends] TemplateBody]
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody]
Extends ::= ‘extends’ | ‘<:’