Краткий ответ: нет, так как значение будет вставлено в строку вызова на сайте вызова, оно не может использовать личные значения и нет реального способа обойти это.
Более длинный ответ: если вы нене возражайте писать невероятно уродливый код, и вы можете справиться с накладными расходами нескольких вызовов методов за использование, одной из альтернатив будет создание динамической реализации (например, OperatorIntrinsics.AbsDynamicTableImpl
в основной библиотеке), которая может быть закрытой.Затем можно обернуть динамическую реализацию в общедоступный непрозрачный универсальный метод (например, OperatorIntrinsics.AbsDynamic<'T>
), а затем создать встроенное значение, которое добавляет надлежащие ограничения типа и откладывает динамическую реализацию (например, let inline abs< ^t when ^t : (static member Abs : ^t -> ^t)> x = AbsDynamic x
).Теперь, когда вы встраиваете abs
, вы просто видите вызов AbsDynamic
, но никаких дополнительных деталей реализации.В большинстве случаев я ожидал бы, что это будет гораздо худшее решение, чем просто сделать вашу ценность публичной, а не частной.