как мерзавец обрабатывает объединяющийся код, который был перемещен в другой файл?

Я полагаю, что код пытается спросить, "x числовые?" с конкретным случаем здесь x = null. Функция isNaN() может использоваться для ответа на этот вопрос, но семантически это относится конкретно к значению NaN. Из Википедии для [1 126] NaN :

NaN ( Not умбра N) является значением типа числовых данных, представляющего неопределенное или непредставимое значение, особенно в вычислениях с плавающей точкой.

В большинстве случаев мы думаем, что ответ на "пустой числовой?" должен быть нет. Однако isNaN(null) == false семантически корректно, потому что null не NaN.

Вот алгоритмическое объяснение:

функция isNaN(x) попытки преобразовать переданный параметр в число 1 глоток> (эквивалентный Number(x)) и затем тестируют, если значение NaN. Если параметр не может быть преобразован в число, Number(x) возвратится NaN 2 глоток>. Поэтому, если преобразование параметра x к числу приводит к [1 114], это возвращает true; иначе это возвращает false.

Так в конкретном случае x = null, null преобразовывается в номер 0, (попытайтесь оценить Number(null) и посмотрите, что это возвращается 0) и isNaN(0) возвращает false. Строка, которая является только цифрами, может быть преобразована в число, и isNaN также возвращает false. Строка (например, 'abcd'), который не может быть преобразован в число, заставит isNaN('abcd') возвращать true, конкретно потому что Number('abcd') возвраты NaN.

В дополнение к этим очевидным пограничным случаям стандартные числовые причины возврата NaN как 0/0.

Что касается на вид непоследовательных тестов для равенства, показанного в вопросе, поведение [1 123] определяется таким образом, что любое сравнение x == NaN является ложью, независимо от другого операнда, включая [1 125] самого 1 глоток>.

10
задан jtjin 13 December 2009 в 20:12
поделиться

2 ответа

No, git won't do this level of change. It will notice when you move an entire file; so, for example, if you moved the file, deleted everything else in it, then it might stand a chance of picking up the changes. But it doesn't do a change on a per-subfile or any kind of refactoring.

7
ответ дан 3 December 2019 в 21:21
поделиться

Я не думаю, что предыдущий ответ верен в общем случае, потому что git на самом деле не заботится о файлах - имя файла используется в качестве основы для некоторых эвристик, но способ git думает, что контент не сосредоточен полностью вокруг идеи файла. В отличие от других VCS, git отслеживает контент , и в этом случае контент был перемещен, но это тот же контент .

В результате git должен иметь возможность обрабатывать сливается между ветвями, даже если файлы были переименованы, или код перемещается между файлами, поэтому в зависимости от того, что именно вы сделали, он, вероятно, справится с слиянием нормально.

Пока изменения в X не вызывают слияния конфликт (что может произойти, если вы измените и исходную версию , и переименованную версию), тот факт, что X был перемещен в B, не имеет значения, и результат слияния должен содержать результат обоих изменений. Если есть проблема, это будет означать, что git неправильно отслеживает движение кода.

На практике предыдущий ответ, вероятно, основан на личном опыте, когда механизм обнаружения отказал, и в этом случае https://git.wiki.kernel.org/index.php/GitFaq#How_to_manually_resolve_conflicts_when_Git_failed_to_detect_rename.3F может быть полезным.

8
ответ дан 3 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: