初歩的なことだけど疑問点メモ。下記のような関数があるとする
func show(message: String?) {
guard let message = message else {
return
}
print(message)
}
これはよくある記述と思うが、なぜ引数と同じ名前が定義出来るか不思議に感じた。引数はletとして扱われているはず。
当初はguard let(もしくはif let)はそういう挙動をすると思ったが、下記の様な記述でも動く。
func show(message: String) {
let message = "Hello " + message
print(message)
}
これは、引数の部分とfuncの中でスコープが異なるということを意味している?c++等ではそういう挙動にならないがswiftはそういうものなんだろうか
void show(const char * message){
const char * message = "foo";//error: redefinition of 'message'
std::cout << message << std::endl;
}
Scalaで試したらエラーになった。これは、messageが未定義なのにmessageを呼んでる的なエラーかな?
def show(message: String) = {
val message:String = "Hello" + message//エラー error: forward reference extends over definition of value message
print(message)
}
でも、下記のScalaコードは通る
def show(message: String) = {
val message:String = "foo"
print(message)
}
またなんか発見があったら追記する。