スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門基本編落穂拾い その31 複数ファイルの取り扱い、Moduleの実行

今回は複数ファイルの取り扱いについて紹介します。
前にも触れましたが、作成するプログラムが実行ファイル(EXE)であろうと、クラスライブラリ(DLL)であろうと、複数のファイルをプロジェクトに加えるには、ファイルのトップに明示的にモジュール名か名前空間名(後で取り上げます)を含める(両方含めるのもOK)必要があります。
次に重要なのは、Solution Explorerに表示されるファイルの順番です。後(下)に表示されるモジュール(module2とします)から、上のモジュール(module1とします)の値等にはmodule1.識別子で参照できますが、上側のモジュールから、下側のモジュールの値は参照できません。(ファイルの中と同じで、上で定義したものしか、下からは参照できないわけです。)ファイルの順番を変える必要があるときには、Solution Explorerでファイルを右クリックして、Move upかMove downで移動します。
 
次の話題にはいる前にdo 束縛を復習しておきます。
通常値を束縛するにはlet t = 3というようにしますが、unit型に評価されるものは、名前をつけてもしょうがないので、let 束縛の代わりに do 束縛というのを使い、例えば
do printfn "hellow" などとします。(このdoはよく省略されます。)
 
それでは実行ファイルを作ったときの実行の仕組みについて説明します。
 
まずは、一つのファイルで構成されている場合です。
原則として、一番最初のモジュールから、最後のモジュールまで順に実行されていきます。
関数以外の値はすべて評価されます。
 
例1、module名も名前空間名を指定しない場合
この場合は自動的にファイル名の最初の一文字が大文字になったものが、暗黙にモジュール名となるので、ファイル全体がトップレベルモジュール扱いとなります。
(練習)実行結果は?
(ひとつのファイルprogram.fs)
 
printfn "print1"
 
let add x y =
    printfn "inFunc"
    x + y
 
let myVal =
    printfn "in val Definition"
    3
 
let myFunc () =
    printfn "inFunc2"
 
let myVal2 =
    let myVal3 =
        printfn "inVal2"
        4
    myVal3
 
(答え)
print1
in val Definition
inVal2
 
例2、一つのファイルにトップレベルモジュールと複数のローカルモジュール
(ひとつのファイルprogram.fs)
module TopLModule
 
printfn "in Top"
 
module LocM1 =
    let v =
        printfn "in LocM1"
        1
 
module LocM2 =
    printfn "in LocM2 begin"
    let v =
        printfn "in LocM2"
        2
 
printfn "end"
 
この場合、トップレベルモジュールとそれに含まれるmoduleの値がすべて評価されます。
(実行例)
in Top
in LocM1
in LocM2 begin
in LocM2
end
 
例3二つのファイル(Program.fs トップモジュールTopModule1とProgram2.fs トップモジュール TopModule2)の場合
 
この場合Solution Explorerの一番下側に表示されるファイル内のモジュール内の値が評価実行されます。
このファイル以外のモジュールにあるものは、dllファイルで参照したときと同じように振舞います。
 
 
(ファイルprogram.fs)
module TopModule1
 
printfn "in Top"
 
let sum1 x =
    printfn "in sum1"
    x+1
 
printfn "end"
 
(ファイルprogram2.fs)
module TopLModule2
 
let u = 3  
printfn "%d"  u 
 
(1)program2がSolution Explorerの下側にある場合の実行例
 
3
続行するには何かキーを押してください . . .
 
(2)programがSolution Explorerの下側にある場合の実行例
 
in Top
end
続行するには何かキーを押してください . . .
 
(注意)下側のモジュールから、上側のモジュールの内の値や関数をインテリセンスを用いて参照するためには、上側のモジュールが一度buildされていることが必要です。(一度buildするまではエラー表示となります。)
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。