2017-03-27 32 views
5

Dlaczego nie #load praca#load nie można załadować wspólne .fsx

próbowałam go w tym samym folderze, w folderze względnej poniżej

Czego mi brakuje?

run.fsx jest

#load "../shared/shared.fsx" 
let key = "MyKey" 

let Run(message: string, log: TraceWriter, result: byref<string>) = 
    result <- doItAll message key 

    log.Info(sprintf "F# results: %s" result) 

shared.fsx jest

let doItAll message key = key + " has handled " + message 

błędu

run.fsx(x,y): error FS39: The value or constructor 'doItAll' is not defined 
+0

Note - upewnij się, że redagował host.json ustawić { \t "watchDirectories": [ "wspólne", "shared-FS"] } –

Odpowiedz

6

Jeśli nie określisz nazw lub nazwę modułu wyraźnie w shared.fsx, następnie kompilator F # umieści kod w pliku w niejawnie nazwanym module Shared. Powinieneś być w stanie naprawić błąd poprzez dodanie open Shared:

#load "../shared/shared.fsx" 
open Shared 

let key = "MyKey" 

let Run(message: string, log: TraceWriter, result: byref<string>) = 
    result <- doItAll message key  
    log.Info(sprintf "F# results: %s" result) 

Jeśli chcesz kontrolować nazywania siebie, można także dodać module oświadczenie shared.fsx i dają jednoznacznego oznaczenia siebie:

module SharedStuff 

let doItAll message key = key + " has handled " + message 
+0

Dzięki Tomas - to trochę, że nie jest jasne, Również w celu wyjaśnienia, jest to duże S z przodu nazwy pliku, niezależnie od nazwy pliku. –

+0

@ DavidLapeš Tak, F # kapitalizuje pierwszą literę - nie jestem całkiem pewien, jakie są reguły, więc używanie jawnej nazwy modułu jest zawsze bezpieczniejszą opcją :) –