2013-04-19 2 views
1

Просто пытаюсь структурировать библиотеку F #. До сих пор это «кажется», что:Как получить скрипты f # для вызова функции func?

  • Я могу только сослаться на C# библиотеку из .fs исходного файла,

  • и .fs исходные файлы не доступны для .fsx файлов сценариев.

Правильное ли какое-либо из этих утверждений? В примерах, которые я читал, просто используйте open, но это работает только из файла .fs.

Есть версия

#r "System.Drawing.dll" 

для файлов сценариев используется с помощью F # интерактивные (FSI) в одном проекте?

Кроме того, я немного различаю синтаксическую разницу между модулями верхнего уровня и нижними модулями. Наверх меня странно, что на верхнем уровне нет равных.

module Utilities 

    module et = 

Почему бы не быть последовательным и иметь «модуль moduleName =» для всего?

+0

Я думаю, им не понять вы правильно, но знаете ли вы, что в VS порядок файлов имеет значение для F #? http://stackoverflow.com/questions/2908473/f-compiler-order-of-source-files – fableal

ответ

4

Важно отметить, что «Ссылки» в Visual Studio в F # применяются только к текущему проекту. Если вы работаете в файле сценария, он не видит библиотеки, на которые ссылается проект.

Для ссылки на библиотеку в файле сценария (например, Script.fsx), вы можете написать (можно использовать как абсолютные пути и относительные пути):

#r @"C:\<path_to_library>\library.dll" 

Если вы хотите загрузить файл, который не является скрипт (например Library.fs) из файла сценария вы можете использовать:

#load "Library.fs" 

fs сам файл не может содержать директивы как #r, поэтому, если файл использует некоторые библиотеки, которые должны быть ссылки, вам необходимо имеют директиву #r в основном файле сценария (для ссылки на библиотеку перед загрузкой исходного файла).

Что касается модуля несогласованности, основной причиной является то, что при использовании module Foo или namespace Foo на высшем уровне, вам не нужно отступа оставшуюся часть файла:

module Foo 

let bar = 10 
module Sub = 
    let bar = 12 
+0

«вам нужно иметь директиву #r в главном файле сценария (для ссылки на библиотеку перед загрузкой исходного файла)» - Кажется, это жаль. Считаете ли вы, что они будут нацелены на то, чтобы согласовать это немного больше, или это не большая проблема на практике? – sgtz

+0

мы можем указать на .csproj или файл .fsproj вместо .dll? Указание на proj \ bin \ debug \ proj.dll не так гладко, как могло бы быть. Спасибо хоть. #load работает как ожидается. – sgtz

Смежные вопросы