以下のOcaml型キャスティング/変換メソッドの違いは何ですか?OCaml型キャスティングの違い
let a = (float) b ;;
そして
let a = float_of_int b ;;
(フロート及びbは整数であることを検討してください。) 別超える任意の利点1はありますか?それとも同じですか?
以下のOcaml型キャスティング/変換メソッドの違いは何ですか?OCaml型キャスティングの違い
let a = (float) b ;;
そして
let a = float_of_int b ;;
(フロート及びbは整数であることを検討してください。) 別超える任意の利点1はありますか?それとも同じですか?
OCamlには一般的な型キャストメカニズムはありません。関数float
は、float_of_int
と同じことが起こります。余分な括弧の有無にかかわらずどちらかを使用できます。
$ ocaml
OCaml version 4.03.0
# float 3;;
- : float = 3.
# float_of_int 3;;
- : float = 3.
# (float) 3;;
- : float = 3.
# (float_of_int) 3;;
- : float = 3.
しかし、そこint
(例えば)という名前の関数ません:
# int 3.1;;
Error: Unbound value int
# (int) 3.0;;
Error: Unbound value int
型キャストは、C(および関連語)のように、実際のOCamlの強力な型システムと互換性がありません。
external float : int -> float = "%floatofint"
external float_of_int : int -> float = "%floatofint"
さらに、(float) b
を書くのスタイルは鋳造を入力されていません。
はpervasivesモジュールにおけるそれらの定義によると、float
とfloat_of_int
は、2つの同一の機能です。それはまだ関数アプリケーションです。ここで使用されている括弧は型キャストを意味するものではありませんが、式の一部と見なすことができます。
は、例えば、以下の3つの式が同じである:
let a = (float) b;;
let a = (float b);;
let a = float b;;
let a = (float) b
は
float
タイプ
int -> float
の関数であり、たまたま
let a = float b
ような構文規則によって解釈されfloat_of_int
と同じ機能です。これはCのようなステートメントのような型変換ではありません
double a = (float)b;
これはOCamlには等価なものがありません。
興味深いことに、 '(float)'は、 'float'を0引数に(誤って)適用することはありません。私は構文を再訪すべきです.. –
OCaml関数はファーストクラスの値であり、0を含むより少ない引数で常に使うことができます。任意の式を括弧でくくることができ、関数名(ファーストクラスの値)は表現。 –
@HunanRostomyan OCamlの関数呼び出し構文は、最初の式を関数に評価する必要がある、単に式式です。括弧はその構文の一部ではないことに注意してください。括弧は単純に式をグループ化するために使用され、任意の式の周りに追加することができます(望むなら '(1)+(2) 'と書くことができます)。 – sepp2k