1. ホーム
  2. syntax

[解決済み] Scalaのシンボルリテラルの使用例にはどのようなものがありますか?

2023-02-05 10:16:31

質問

シンボルリテラルの使い方は、Scalaの本を読んでもすぐにはわかりません。どなたか、実際の使い方を教えていただけませんか?

シンボル・リテラルによってカバーされる特定のJavaイディオムがありますか? どのような言語が同様の構造を持つのでしょうか? 私はPythonの背景から来て、その言語で類似したものがあるかどうかわからない。

HelloWorld vs "HelloWorld"」を使用する動機は何でしょうか?

ありがとうございます。

どのように解決するのですか?

Java用語では、シンボルはインターン文字列です。これは、例えば、参照等価比較( eq はScalaでは == はJavaの場合)は通常の等値比較( == は,Scalaでは equals はJavaの場合)。 'abcd eq 'abcd は真を返しますが "abcd" eq "abcd" はJVMの気まぐれによって、真を返さないかもしれません(まあ、リテラルに対してはそうすべきですが、一般的に動的に作成される文字列に対してはそうではありません)。

シンボルを使用する他の言語としては、Lisp (これは 'abcd を使う)、Ruby ( :abcd )、Erlang や Prolog ( abcd シンボルではなくアトムと呼ばれる)。

私がシンボルを使うのは、文字列の構造を気にせず、純粋に何かの名前として使用する場合です。例えば、CDを表すデータベースのテーブルに、"price"という名前の列があったとして、"price"の2文字目が "r" であっても、列名を連結しても気にしない。だからScalaのデータベースライブラリーはテーブルと列名にシンボルを合理的に使うことができるのだ。