学習の記録ー13(クラスのインデントがわからん)

頭出し

F#でクラスを書くときにのインデントがよくわかってないので、以下に書くコードのMyFormクラスを適当に書き変えて

をメモっておきたい。
基本、=の後は改行+インデントしとけばいいという印象。ただclass...endの時は=の後にクラスって書いてもいいんだよなぁ…わからん。

open System
open System.Windows.Forms

type MyForm = 
    inherit Form
    new() = {} then()

[<EntryPoint>]
let main (args :string []) =
    let x = new MyForm()
    0

ちなみにこれはコンパイル通る。
F#界隈の諸先輩方

のコードをみると似たようなコードの中でinherit Form as baseとas baseをつけた既述をされているが、これをやるとコンパイルが通らない。

class ... end入れてみる

コンパイル通った。

type MyForm = class
    inherit Form 
    new() = {} then()
end

書籍「Expert F#3.0」のP143によるとこのように明示的にclass ... end*1で区切ってもいいんだが、なくても良いそうだ。どっちや。

inherit Form上にあげてみる

コンパイル通らんかった

type MyForm = inherit Form 
    new() = {} then()

newの{}で改行+インデント

コンパイル通った。

type MyForm = 
    inherit Form 
    new() = 
        {} then()

newの{}で改行+インデントして、thenも改行+インデント

コンパイル通った。

type MyForm = 
    inherit Form 
    new() = 
        {}
        then()

newの}で改行+インデント

コンパイル通らん、なんでや。

type MyForm = 
    inherit Form 
    new() = {
        } then()

thenで改行+インデント

コンパイル通らんかった。

type MyForm = 
    inherit Form 
    new() = {}
        then()

newの{と}で改行+インデント

コンパイル通った。

type MyForm = 
    inherit Form 
    new() = 
        {
        
        }
        then()

*1:ほかにもstruct ... end, interface ... endがある