関数定義について

def hoge() { "hoge" }

def piyo() = { "piyo" }

の違いは

def hoge() { "hoge" }

は返り値が無い。
ということ。

ブロックに名前を付けている(バインドしている)感じかな?
対話環境で実験するとわかりやすい。

もちろん、戻り値を明記した場合は、

def bar(a:String):String = { s }

としなければならない。

また、matchを使う場合は

def foo(a:Any) a match { ... }

とは書けないので、

def foo(a:Any) = a match { ... }

とするか、

def foo(a:Any) { a match { ... }}

の様にブロックの中に入れる必要がある。