F# compile FSharpChart: встроенная ошибка

Я пытался скомпилировать библиотеку 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 ответ

Решение

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

Чтобы добавить больше деталей:

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

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

Другие вопросы по тегам