by shigemk2

当面は技術的なことしか書かない

Scalaのメソッド名としての*

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]

ざっくり言うと、囲み文字とかエスケープ文字、そしてアンダースコア以外の文字は識別子として利用可能らしい。つまり、?とか*も、関数名としては使用可能ということになる。

Syntax Summary

stackoverflow.com

Programming Scala: Scalability = Functional Programming + Objects

Programming Scala: Scalability = Functional Programming + Objects