F # Порядок файлов в командной строке? - PullRequest
2 голосов
/ 26 июля 2011

Почему кажется, что порядок аргументов имеет значение для F #?Это не имеет значения для C # (который использует ту же модель компиляции).Когда я пытаюсь это сделать:

# main.fs
module Main
let main = Printer.print_repeatedly 5 "hello, world"

# printer.fs
module Printer
let print_repeatedly n str = for x in 1..n do printfn "%s" str

И я запускаю компилятор (как Microsoft, так и Mono) с main.fs, предшествующим printer.fs, я получаю ошибку:

main.fs(4,12): error FS0039: The namespace or module 'Printer' is not defined

Если яделайте printer.fs перед main.fs в командной строке, это нормально.Есть ли причина, по которой компилятор требует этого для F #?

1 Ответ

7 голосов
/ 26 июля 2011

В F # порядок файлов, передаваемых компилятору, абсолютно имеет значение: компилятор F # читает программы строго слева направо и сверху вниз. Переменные и типы могут ссылаться только на те, которые определены до них, если вы явно не укажете взаимно рекурсивные отношения через and.

Если вы пришли из C #, поначалу это может показаться ограничением. Но вы узнаете, что на практике это невероятно эффективное обеспечение организации кода и предотвращает рекурсивное безумное обращение.

Обратите внимание, что прямые ссылки на самом деле являются довольно современной функцией языков программирования и компиляторов (вы не получаете их "бесплатно"), если вам когда-либо приходилось работать с ранними компиляторами C ++, вы можете помнить о необходимости пересылки декларации, позволяющие это сделать (если компилятор выполняет память затрат на работу, которая не всегда была настолько обильной).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...