F # compile FSharpChart: встроенная ошибка - PullRequest
1 голос
/ 26 мая 2011

Я попытался скомпилировать библиотеку FSharpChart из http://blogs.msdn.com/b/dsyme/archive/2011/04/01/fsharpchart-wrapping-the-system-windows-forms-datavisualization-charting-charting-types.aspx, и получил ошибку компиляции вроде

Error   1   The value 'StackedArea100' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible   

из

type FSharpChart =
    /// Displays multiple seriesÿof data as stacked areas. The cumulative proportion
    /// of each stacked element is always 100% of the Y
    /// axis.
    static member StackedArea100<'TY when 'TY :> IConvertible>(data: seq<'TY>) = 
        GenericChart<_>.Create<StackedArea100Chart>(oneY data)
    /// Displays multiple seriesÿof data as stacked areas. The cumulative proportion
    /// of each stacked element is always 100% of the Y
    /// axis.
    static member inline StackedArea100<'TX, 'TY when 'TX :> IConvertible and 'TY :> IConvertible>(data:seq<'TX * ('TY)>) = 
        GenericChart<_>.Create<StackedArea100Chart>(oneXYSeq data)
    /// Displays multiple seriesÿof data as stacked areas. The cumulative proportion
    /// of each stacked element is always 100% of the Y
    /// axis.

Может кто-нибудь просветить меня, что происходит?спасибо.

1 Ответ

3 голосов
/ 26 мая 2011

Нет причины, по которой StackedArea100 (и другие подобные члены) должны быть inline.Вы можете исправить это, заменив все вхождения static member inline на static member.Если вы можете оставить комментарий к сообщению в блоге команды F #, это было бы замечательно (чтобы они могли исправить это в следующем выпуске).

Чтобы добавить некоторые подробности:

Причина, по которой компилятору F # не нравится код, состоит в том, что функция oneXYSeq, используемая в реализации, должна иметь значение internal, и поэтому StackedArea100 не может быть встроенным (потому что для этого потребуется доступнедоступная вспомогательная функция).Причина, по которой он работает в F # Interactive, заключается в том, что файл FSharpChart.fsx загружается в текущую сборку, поэтому элементы internal видны.

Энди, почему в исходном коде нет необходимости inline?Это потому, что я первоначально экспериментировал с использованием типов шляп, например ^T, для написания универсальных членов, которые работают с любым числовым типом (а типы шляп требуют inline).Затем мы решили переключиться на IConvertible, поэтому аннотация inline больше не нужна.

...