リスト[Char]をスカラーで定義したいのですが間違いました。私は 'b'の後に一重引用符を覚えていませんでした。しかし、List [Any]インスタンスがあります。 Scalaのバグか正常な結果ですか?これはScalaのバグで、次のようなリストを定義するときです:
scala> val list = List('a',**'b**,'c','d') list: List[Any] = List(a, 'b, c, d)
リスト[Char]をスカラーで定義したいのですが間違いました。私は 'b'の後に一重引用符を覚えていませんでした。しかし、List [Any]インスタンスがあります。 Scalaのバグか正常な結果ですか?これはScalaのバグで、次のようなリストを定義するときです:
scala> val list = List('a',**'b**,'c','d') list: List[Any] = List(a, 'b, c, d)
これはバグではありません。一文字の先頭はScalaのSymbolを意味します。私はちょうどそれを知っていた。 すみません。私はScalaの初心者です。
すでに森が回答しているので、'b'
の値は文字ですが、'b
はSymbol
(有効なScala識別子でもある標準文字列)になります。
タイプはA
のリストに追加する場合、A
というインスタンスの追加に制限されません。しかし、A
以外のものをリストに追加すると、より一般的なリストが結果として得られます。例:あなたはこのような何かを行うと
class A {}
class B extends A {}
class C extends A {}
val list1:List[B] = List(new B(), new B(), new B())
val list2:List[A] = new C() :: list1
、Scalaは(上記の例では、これはA
である)、より一般的なスーパータイプを見つけ、そのタイプのリストを返します。これは、タイプList
のリストが不変であり、リストに要素を追加すると、実際には新しいリストを作成し、古いリストを変更しないままにしておくことができるためです。新しいリストは、元のリストよりも一般的なタイプのリストにすることができます。
Char
とSymbol
の唯一の一般的なスーパータイプがAny
であるため、あなたのケースでは、誤ってこの機能を突き抜けました。