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

Scalaのimportの役割

  • Javaと違ってどこでも書ける
    • しかもimportのスコープを限定できる
  • =>で別名をつけることができる
def writeAboutBigInteger () = {
  // Javaと違って、importはファイルの先頭以外のところにも書ける
  // ので、importのスコープ(影響範囲)を小さくできる
  // => で別名をつけることができる
  import java.math.BigInteger.{
    ONE => _,
    TEN,
    ZERO => JAVAZERO }

  // ONEは事実上、未定義
  // println( "ONE:" + ONE )
  println( "TEN: " + TEN )
  println( "ZERO: " + JAVAZERO )
}

writeAboutBigInteger()

Programming Scala: Scalability = Functional Programming + Objects

Programming Scala: Scalability = Functional Programming + Objects