Как определить структуру ref в F # в .NET Standard 2.0? - PullRequest
0 голосов
/ 26 декабря 2018

Когда F # 4.5 было объявлено , было заявлено, что:

Набор функций F # состоит из

  • [...]

  • Возможность создания структур IsByRefLike (примеры таких структур: Span <'T> и ReadOnlySpan <' T>).

Как "производить" эти виды?Я попробовал атрибут [<IsByRefLike>], но он не был найден в .NET Standard 2.0.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Технически, это не ответ.

Первый , в соответствии со спецификациями, IsByRefLike предназначен для компилятора, а не для разработчиков: https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.isbyreflikeattribute?view=netframework-4.7.2

Второй Когда мы хотим что-то от компилятора, очень важно, чтобы мы понимали, чего мы хотим от него.Правильный вопрос может быть таким: Мне нужен ABC, потому что мне нужно выполнить XYZ , где ABC будет что-то, связанное с IsByRefLike, а затем XYZ будет что-то, основанное на IsByRefLike.Вопрос не объясняет, почему IsByRefLike необходим.

Я думаю, что минималистский подход должен всегда учитываться при рассмотрении того, какие языковые функции использовать / не использовать: нужны ли нам какие-то особые языковые функции длявыполнить то, что нам нужно?F # Option.bind приходит на ум: если функция однострочная, то Option.bind отлично.Однако, если есть какое-то дерево для анализа результата, то лучше сделать это явно, не используя Option.bind.

Итак, вопросы:

  1. Вам действительно нужно IsByRefLike?
  2. Если вы считаете, что это так, не могли бы вы, пожалуйста, опубликовать примергде вы на самом деле нужно это нужно.
0 голосов
/ 27 декабря 2018

Атрибут находится в System.Runtime.CompilerServices

open System.Runtime.CompilerServices

[<Struct; IsByRefLike>]
type Apa =
    { A: Span<int>
      B: int }

Об этом говорит Филипп Картер в Что нового в F # 4.5 (около 21 мин. В).

Он доступен для .NET Core и .NET Framework, но не для .NET Standard 2.0.

...