Scalaでは*をメソッド名に使うことができるので、をワイルドカードとして使う。というか、アンダースコア()はScalaの文法で特別な意味を持つため,使わないように厳しく自制する。
import java.awt._ import java.io.File import java.io.File._ import java.util.{Map, HashMap} def *(n: Int): Int = { n } println(*(5))
命名規約 — Scala Style Guide v1.2.5 documentation
最初は命名規則の方を見ていたけど、よく考えたら、命名規則ではなく、言語仕様の問題なんだなって思い始めた。
識別子周りの言語仕様はこんな感じになっているらしく
idrest ::= {letter | digit} [`_' op]
ざっくり言うと、囲み文字とかエスケープ文字、そしてアンダースコア以外の文字は識別子として利用可能らしい。つまり、?とか*も、関数名としては使用可能ということになる。
Programming Scala: Scalability = Functional Programming + Objects
- 作者: Dean Wampler,Alex Payne
- 出版社/メーカー: O'Reilly Media
- 発売日: 2014/12/03
- メディア: Kindle版
- この商品を含むブログを見る