ついてscalaasInstanceOfisInstanceOfclassOfの3つはscalaのキーワードというか予約語ではないです。文法上はあくまでメソッドです。考えると半分予約語というか、特殊な存在です。特殊な存在かというと、これらはすべて型引数を1つだけとります。実際の引数は取りません。javaでもscalaでもそうですが、受け渡す型引数によって、実行時に戻り値を変更するというのはできないはずです*1javaを知っている人にとっては、この3つに関して、そのまま対応するものがあるのでわかりやすいはずです。String.class;使い方だけだったら、javaわかる人はこれだけでわかると思うんですが、もうちょっと突っ込んで内部の仕組みというか、文法上どういう風に扱われているのかを調べてみます。asInstanceOfとisInstanceOfですが、ライブラリのどこかのソースコード上に定義されているものではありませんAnyに定義されているものです。Any自体のソースコードはありません。*2*3そして、classOfについてはPredefに以下のように定義されてます。nullPredefに定義されているということは、感覚的はグローバル関数のように使用できるわけです。classOfのコメントをみると、"実際の実装はコンパイラがやるよ"みたいなことがかいてありますね。́・ω・`)ここからはあくまで個人的な推測です。この3つをメソッドにした理由は、おそらく単純に、予約語を増やしたくなかったんでしょうかね?予約語でなく、メソッドとして扱っておけば、構文の解析がその分楽になるんじゃないかと。*4おそらく同じような理由で、volatile、native、transientなども、予約語ではなく*5、アノテーションになってるのではないかと思います。*6あと、synchronizedも予約語ではなくAnyRefのメソッドという扱いですね。*1:まちがってたら誰か突っ込んでください。実行時というのがポイントです*2:仮想的にソースコード自体はつくろうと思えば作れますけど、コンパイラがそのソースコードもとに、Anyを他のクラスと全く同じように扱って解析し、classファイルを生成するというのが不可能です。最近(2.9.0)になって、おそらくScaladoc用のために仮想的なソースコードおいてるみたいですね。NothingやNullもある*4:javaだと、この3つが、すべて構文に組み込まれています*5:javaでは同名の予約語。1注目記事はてなブログをはじめよう!xuweiさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。