18

Scalaでは、何をしますか

trait A <: B

平均?と同じですか

trait A extends B

追加するために編集:私は型パラメーターの構文と<:、そのコンテキストでの意味に精通しています。Aただし、上記の例では、タイプパラメータではなく、宣言されているトレイトの名前であるように思われます。

4

5 に答える 5

19

注意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’ | ‘&lt;:’

更新r14632で導入されました。コンパイラ オプションを使用すると、提案された言語機能Virtual Traits-Xexperimentalで使用するために、トレイトを抽象としてマークします。がなければ、trait にのみ許可される 'extends' の同義語です。-Xexperimental

于 2010-01-23T17:31:10.897 に答える
11

<: 構文は、仮想クラス (まだ実装されていません) で将来使用するために予約されています。

于 2010-02-19T11:04:58.227 に答える
4

Scala Language Specificationを見ると、同じことを意味しているようです。trait の説明では、trait A extends B構文についてのみ言及しています。しかし、Scala 構文の要約では、トレイト定義に and を同じ意味でextends使用しています。<:

TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody]
Extends ::= ‘extends’ | ‘&lt;:’ 
于 2010-01-23T18:20:41.480 に答える
3

はい、まあ、ほとんど、もう少し詳細についてはこの記事を参照してください。言語仕様から、次の定義がわかります。

タイプ間の2つの関係を定義します。

タイプの同等性T≡UTとUは、すべてのコンテキストで交換可能です。

適合性T<:UタイプTはタイプUに適合します。

編集:言語仕様を調べると、同じであるように見えます<:extends特に、次のように定義されています。

ClassTemplateOpt ::= Extends ClassTemplate | [[Extends] TemplateBody]
TraitTemplateOpt ::= Extends TraitTemplate | [[Extends] TemplateBody]
Extends ::= ‘extends’ | ‘&lt;:’
于 2010-01-23T16:10:13.213 に答える