F # рассматривает внутренний модуль как частный - PullRequest
8 голосов
/ 06 сентября 2011

Есть идеи, почему следующее не компилируется?

В последней строке сообщается, что Module1 не определен. Если я уберу «внутренний» из модуля 1, он будет работать нормально.

У меня есть два файла кода, и Module1.fs находится выше Module2.fs в проекте.

Module1.fs

module internal Module1

let sample =
    5 + 4

Module2.fs

module Module2

let sample2 =
    3 + Module1.sample

Ответы [ 3 ]

7 голосов
/ 06 сентября 2011

Вам нужно дать своим модулям пространство имен, чтобы модуль internal был виден для последующих.

let module internal MyNamespace.Module1
let module MyNamespace.Module2
4 голосов
/ 05 апреля 2014

Ошибка компилятора

Хотя ответы здесь являются обходными путями, это поведение все еще является ошибкой компилятора.Читая документы и эксперт F # Дона Сайма, нет смысла, который говорит , что типы во внутренних модулях будут доступны , только если вы также используете пространства имен .

Учитываякод, который выдает компилятор, я бы не увидел трудностей в том, чтобы сделать типы внутри внутренних модулей видимыми внутри сборки.

Редактировать: Передав это поведение @fsbugs, самому мастеру Дону Саймувскоре подтвердил, что это ошибка.Я добавил рабочий элемент для этого случая:

https://visualfsharp.codeplex.com/workitem/29

2 голосов
/ 06 сентября 2011

это должно быть проблемой пространства имен. Просто добавьте определения пространства имен поверх обоих ваших файлов (одно и то же пространство имен!) Следующим образом:

namespace MyNamespace

module internal Module1 =

let sample = 5+4

и

namespace MyNamespace

module Module2 =

let sample2 = 3 + Module1.sample
...