Self и супер в nix оверлеях - PullRequest
       8

Self и супер в nix оверлеях

0 голосов
/ 19 сентября 2018

В nix оверлей - это функция с 2 аргументами: self и super.Исходя из руководства , self соответствует окончательному набору пакетов (или некоторые другие называют это результатом вычисления точки фиксации) и используется только при работе с зависимостями.Хотя super является результатом оценки предыдущих этапов nixpkgs и может быть использовано только при обращении к пакетам, которые вы хотите переопределить или получить доступ к определенной функции.

К сожалению, я действительно не понимаю этого.Каким образом nixpkgs обновляется оверлеями, так что есть 2 ограничения, упомянутых выше?

1 Ответ

0 голосов
/ 19 сентября 2018

Эти ограничения вытекают из требования о прекращении оценки атрибута.

Предположим, вы хотите переопределить пакет hello.Чтобы сослаться на старое определение пакета, вам нужно использовать super.hello, потому что этот атрибут может быть оценен без оценки вашего определения hello в оверлее.Если вместо этого вы будете ссылаться на self.hello, это означает, что для оценки конечного атрибута hello, Nix должен будет оценить self.hello, который ссылается на конечный атрибут hello, который ссылается на self.hello, и так далее, создаваябесконечная рекурсия.

self на самом деле может использоваться для ссылки на функции, но конвенция, похоже, вместо этого использует super.Идея о том, что следующий оверлей может обезболить функцию lib.head, не очень заманчива, хотя с помощью super то же самое можно сделать и в предыдущем оверлее.

Вы также можете проверить это отличная презентация NixCon 2017 от Николаса .Он одновременно представляет концепцию и объясняет, как вы можете использовать ее наилучшим образом.

...