F # Могу ли я использовать отрицательные индексы на массивах.(как в Python)? - PullRequest
3 голосов
/ 20 сентября 2019

Я хотел бы использовать отрицательные индексы для массивов, чтобы я мог написать myThings.[-2] <- "sth", чтобы установить второй последний элемент.Возможно ли это?

Я пробовал это, но не компилируется с:

Method overrides and interface implementations are not permitted here

type ``[]``<'T>  with  
    /// Allows for negative index too (like python)
    override this.Item
        with get i =   if i<0 then this.[this.Length+i]      else this.[i]
        and  set i v = if i<0 then this.[this.Length+i] <- v else this.[i] <- v

Я знаю, я мог бы использовать новых членов, таких как myThings.SetItemNegative(-2,"sth")но это не так хорошо, как использование индексной нотации:

type ``[]``<'T>  with  
    /// Allows for negative index too (like python)
    member this.GetItemNegative (i) =
          if i<0 then this.[this.Length+i]      else this.[i]

    member this.SetItemNegative (i,v) =
          if i<0 then this.[this.Length+i] <- v else this.[i] <- v

1 Ответ

5 голосов
/ 20 сентября 2019

К сожалению, существующие методы в типе имеют приоритет над будущими членами расширения.

Это не имеет особого смысла, но в настоящее время так и есть, вы можете прочитать больше об этом в этом выпуске: https://github.com/dotnet/fsharp/issues/3692#issuecomment-334297164

Вот почему, если вы определите такое расширение, оно будет проигнорировано, а что хуже всего: беззвучно проигнорировано!

В любом случае есть предложения добавить что-то похожее на отрицательные срезы в F #.

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