Расширение модуля F # против типа entension - PullRequest
6 голосов
/ 20 мая 2011

Если я хочу определить метод расширения для массива с плавающей точкой, например стандартное отклонение, было бы лучше использовать расширение модуля для модуля Array или расширение для типа float[]?например:

module Array =
   let std (arr: float[]) = ...

или

type float ``[]`` with 
    member this.std = ...

Если я сделаю расширение типа последним, будет ли std вычисляться только один раз или каждый раз, когда он используется?

И, каков правильный формат для последнего, примерно type float ``[]`` with не компилируется ... спасибо.

1 Ответ

5 голосов
/ 20 мая 2011

В этом случае вы не можете определить расширение типа, поэтому проблема спорная - вы должны использовать расширение модуля Array. Причина, по которой вы не можете определить расширение типа, заключается в том, что в F # расширения типа должны точно соответствовать определениям типа, поэтому вы можете определить расширение типа, например, для общего типа 'a list, но не для составного типа * 1003. *. Точно так же вы можете определить метод расширения для (моделируемого) универсального типа массива

'a ``[]``

но не для построенного типа массива

float ``[]``

Это поведение отличается от C #, где можно писать методы расширения для созданных универсальных типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...