10

奇妙なクラス名を持つscalaコードを見つけました:

 class `This is a cool class` {}

メソッド名:

 def `cool method` = {}

クラスまたはメソッド名に文を使用できます。

これは非常にクールで、単体テストに役立ちます。

class UserTest {
   def `user can be saved to db` {
      // testing
   }
}

しかし、なぜこれができるのでしょうか。それを理解する方法は?

4

5 に答える 5

15

この機能は、相互運用性のために存在します。Scala に予約語 (withなど) がある場合でも、逆引用符を使用して、それをメソッドや変数などとして使用する他の言語のコードを参照できます。

ほぼ任意の文字列を禁止する理由がなかったので、ほぼ任意の文字列を使用できます。

于 2012-05-29T11:37:00.790 に答える
7

@Rex Kerrが答えたように、この機能は相互運用性のためのものです。例えば、

Java メソッドを呼び出すには、

Thread.yield()

あなたは書く必要があります

Thread.`yield`()

sinceyieldは scala のキーワードです。

于 2012-05-29T11:49:45.000 に答える
5

Scala 言語仕様:

識別子を形成する方法は 3 つあります。まず、識別子は文字で始まり、その後に任意の文字と数字のシーケンスが続きます。この後に、アンダースコア「_」文字と、文字と数字または演算子文字で構成される別の文字列が続きます。第 2 に、識別子は演算子文字で始まり、その後に任意の一連の演算子文字が続く場合があります。前の 2 つの形式はプレーン識別子と呼ばれます。最後に、識別子は逆引用​​符で囲んだ任意の文字列によって形成することもできます (ホスト システムは、どの文字列が識別子として有効かについていくつかの制限を課す場合があります)。識別子は、逆引用符自体を除くすべての文字で構成されます。

于 2012-05-29T11:35:28.683 に答える
2

`で囲まれた文字列は、クラス名やメソッドだけでなく、関数や変数に対しても、Scala で有効な識別子です。

于 2012-05-29T11:30:28.830 に答える
1

私にとっては、パーサーとコンパイラーがそれを可能にするように構築されたので、Scala チームがそれを実装しただけです。

getThisIncredibleItemまたはの代わりに関数に実際の名前を付けることができるのは、コーダーにとってクールだと思いますget_this_other_item

Scala で何か新しいことを学んだ質問をありがとう!

于 2012-05-29T11:33:10.910 に答える