スコープやオフサイドルール小話
この記事は F# Advent Calendar 2014 の28日目の記事です。 引き続きガス欠気味なので小ネタで。
module Hoge = let hoge = // lazy もオフサイドルールの対象である lazy let a = 1 a + 1 do // スコープが異なるので定義できる let hoge = 1 let mutable x = 0 x <- printfn "test" 1 // これは無理 // x <- printfn "test" // 1 // 変数 x は上記 do 束縛のスコープ内のみ有効なので、以下のコードはコンパイルエラー // let fuga = x
気になったので F# Specification 3.0 を検索したら 8.13.2 にのみ "do bindings" という記述が見つかった。
"let bindings"も同じセクションでしか見つからなかったので、仕様書では bindings という単語をつかわない模様。
モジュール内での do
に関しては 10.2.5 で "do statements" と記載されている。