Правильно использовать формулу rlang :: as_function в аргументе .predicate для mutate_if

Давайте рассмотрим интерфейс как указатель.

Скажем, у вас есть указатель a, и он равен нулю, и ничего не указывает.

var a *int // nil

Тогда у вас есть указатель b, и он указывает на a.

var b **int
b = &a // not nil

Посмотрите, что произошло? b указывает на указатель, который указывает на ничего. Так что даже если это указатель nil в конце цепочки, b указывает на что-то - это не ноль.

Если вы заглянете в память процесса, это может выглядеть так: это:

address | name | value
1000000 | a    | 0
2000000 | b    | 1000000

Видите? a указывает на адрес 0 (это означает, что он nil), а b указывает на адрес a (1000000).

То же самое относится к интерфейсам (за исключением того, что они немного в памяти ).

Как и указатель, интерфейс, указывающий на указатель на nil, не будет нить.

Здесь см. себя , как это работает с указателями и , как это работает с интерфейсами .

1
задан Konrad 15 January 2019 в 17:11
поделиться