2017-01-10 3 views
3

私は拡張子Ionide-fsharpで次のコードを入力し、私はcスペースがタイプを変更しますか?

let test a b c = a/b +c 
let test a b c = a/b +c 

タイプはint -> (int -> int) -> int -> intになったの前にスペースを削除する場合、そのタイプは、しかし

let test a b c = a/b + c 

int -> int -> int -> intのですか?

ただし、次の式は元の型を取得します。

let test a b c = a/b+c 

Visual Studioは、同じ結果を得ました。 F#の表現では+ccと扱われているようです。

+1

'-c'は何をするのですか?今は意味が分かりますか? 'c 'と構文砂糖を' + c'と考えるが、 '-c'は構文的砂糖を持たない。 –

答えて

4

はい、あなたの前提は正しいです:空白のない用語の前にあるプラス記号は、バイナリ記号ではなく、単項演算子として扱われます。ちなみにマイナス記号でも同じことが起こります。

ことが決定された後、残りの部分を解釈する唯一の方法があります:b +cしたがって、bintをとる関数でなければならない、引数+cに機能bのアプリケーションでなければなりません。このアプリケーションの結果は部門内の分母として使用されるため、タイプはintでなければなりません。したがって、bint -> intである必要があります。

+0

このスペースを誤って削除するのはとても簡単です。そしてa + b、a * bは混乱を加えた。単項演算子が必要な場合は、(+ b)にすることをお勧めします。 – ca9163d9

+1

もちろん、簡単ですが、コンパイラは即座にそれをキャッチします。 –

関連する問題