Подтвердить что ты не робот

F # эквивалентно Eval

Существует ли эквивалент F # для eval? Мое намерение состоит в том, чтобы мое приложение загрузило небольшой образец кода из файла и, по существу,

let file = "c:\mysample"
let sample = loadFromFile file
let results = eval(sample)

Я новичок в F # и пытаюсь выяснить некоторые из ограничений, прежде чем применять его к проекту.

Спасибо

4b9b3361

Ответ 1

Нет функции, которая позволяла бы вам делать это напрямую. Однако, если вы хотите скомпилировать исходный файл F # программно, вы можете вызвать компилятор F # из вашего приложения. Самый простой способ сделать это - использовать поставщика F # CodeDOM, который доступен как часть F # PowerPack (в сборке FSharp.Compiler.CodeDom.dll). Однако учтите, что на компьютере пользователя должен быть установлен компилятор F #.

Код для запуска компилятора будет выглядеть примерно так:

open Microsoft.FSharp.Compiler.CodeDom

let provider = new FSharpCodeProvider()
let compiler = provider.CreateCompiler()

let parameters = new CompilerParameters
  (GenerateExecutable = true, OutputAssembly = "file.exe")
let results = icc.CompileAssemblyFromFile(parameters, "filename.fs")

Как только вы скомпилируете исходный файл в сборку, вам нужно будет загрузить сборку с помощью .NET Reflection и запустить определенную функцию или класс из сборки (вы можете, например, искать функцию с каким-то специальным именем или отмеченным с некоторым атрибутом).

(В качестве побочной заметки использование цитат или запись собственного интерпретатора, упомянутого в связанном вопросе SO, может быть вариантом, если ваш исходный код относительно прост, но, вероятно, нет, если вы хотите поддерживать полную мощность F #)