Инициализировать переменную OCaml - PullRequest
0 голосов
/ 02 сентября 2018

Как можно сделать эквивалент int variable; в OCaml? То есть как просто объявить переменную? Согласно руководству по OCaml, кажется, что можно объявить и инициализировать переменную только за один шаг. Если так, то почему это было бы желаемое поведение?

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

TL; DR

Проще говоря : вам не нужно объявлять типы ваших функций и переменных, потому что OCaml просто определит их для вас! let x = 3;;

OCaml использует вывод типа , что означает, что ваш компилятор определяет тип переменной по тому, что вы ему присваиваете.

Вывод типа - это способность автоматически выводить, частично или полностью, тип выражения во время компиляции. Компилятор часто может определить тип переменной или сигнатуру функции, без явных аннотаций типов. Во многих случаях можно полностью исключить аннотации типов из программы, если система вывода типов достаточно надежна или программа или язык достаточно просты.

Используется, потому что убирает домашнее хозяйство из создания переменных. Вам не нужно явно вызывать то, что очевидно, и компилятор позаботится об этом за вас. Кроме того, вам нужно лучше понять, как ваш код использует переменные, которые вы присваиваете. Эта статья содержит чуть больше деталей

0 голосов
/ 02 сентября 2018

Переменные в OCaml объявлены и неизменны.

Основная причина этого заключается в том, что неинициализированные переменные являются источником ошибок:

int x; // not initialized
read_and_use(x); // error

Удостоверившись, что ваши переменные всегда инициализируются, вы можете быть уверены, что в вашем коде не может быть никакого несанкционированного значения.

Другим моментом этого является неизменность (которая поставляется с декларативными заявлениями):

let x = 4;; (* Declare x *)
let f y = x + y;; (* Use x *)
let x = 5;; (* Declare a new variable with the same name as x *)
assert (f 10 = 14);; (* The x = 4 definition is used, as x is immutable *)

Поскольку переменные являются константами, объявление их инициализированными приведет к созданию постоянно недопустимых переменных. И это довольно бесполезно.

Тот факт, что переменные в OCaml (и большинстве функциональных языков) устанавливаются один раз и только один раз, может поначалу показаться странным, но на самом деле это не меняет выразительность вашего языка и помогает сделать ваш код понятным и безопасным.

...