Есть ли хороший способ для встроенной функции получить доступ к частным или внутренним значениям?

StackOverflow https://stackoverflow.com/questions/4824536

  •  26-10-2019
  •  | 
  •  

Вопрос

Я только что столкнулся с проблемой: когда я пытаюсь получить доступ к частному или внутреннему значению из встроенной функции, я получаю ошибку «Значение» было отмечено встроенной, но ее реализация использует внутреннюю или частную функцию, которая недостаточно достаточно доступный ". Несмотря на логичную, мне интересно, есть ли у кого -нибудь хорошая работа. Лучшее, что я могу подумать, это поместить ценности публично в вложенном модуле и просто надеется, что никто не пойдет ни на кокри (о чем я не слишком беспокоюсь, так как эти ценности неизменны). Я полагаю, что отражение - это вариант, но без возможности кеша (используя ... частные делегаты) удары по производительности слишком много.

Это было полезно?

Решение

Короткий ответ: Нет, поскольку значение будет вставлено в линии в сайте вызовов, оно не может использовать личные значения, и нет реального способа обойти его.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top