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
аннотации больше не нужны.