ОБНОВЛЕНИЕ: Закрытия являются действительно ответом. Таким образом, после игры с ним еще немного, я выяснил, почему закрытия были первоначально проблематичны и как зафиксировать его. Хитрая вещь с закрытием - Вы, должны быть осторожными при итерации через элементы для не окончания со всеми закрытиями, ссылающимися на тот же элемент. Например, это не работает:
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var button = document.createElement("button");
button.addEventListener("click", function(ev) {
// do something with element here
}, false)
}
, Но это делает:
var buildListener = function(element) {
return function(ev) {
// do something with event here
};
};
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var button = document.createElement("button");
button.addEventListener("click", buildListener(element), false)
}
Так или иначе, я решил не выбрать один ответ, потому что вопрос имел два ответа: 1) Нет, нет никаких внутренних идентификаторов, которые можно использовать; 2) необходимо использовать закрытия для этого. Так я просто upvoted первые люди, которые скажут, были ли внутренние идентификаторы или кто рекомендовал генерировать идентификаторы плюс кто-либо, кто упомянул закрытия. Спасибо за справку!
Добавьте это в свой .bashrc:
function swap()
{
local TMPFILE=tmp.$$
mv "$1" $TMPFILE
mv "$2" "$1"
mv $TMPFILE "$2"
}
Если вы хотите обработать потенциальный отказ промежуточного mv
, проверьте Can Bal, answer .
Обратите внимание, что ни этот, ни другие ответы не предоставляют атомарного решения, потому что это ' Невозможно реализовать это с помощью системных вызовов Linux и / или популярных файловых систем Linux. Для ядра Дарвина проверьте системный вызов exchangengedata
.
использование mv означает, что у вас на одну операцию меньше, нет необходимости в последнем rm, также mv изменяет только записи каталога, поэтому вы не используете дополнительное дисковое пространство для копии.
Temptationh then заключается в реализации функции оболочки swap () или чего-то подобного. Если вы все же будете предельно осторожны, проверяйте коды ошибок. Может быть ужасно разрушительным. Также необходимо проверить наличие уже существующего файла tmp.
You could simply move them, instead of making a copy.
#!/bin/sh
# Created by Wojtek Jamrozy (www.wojtekrj.net)
mv $1 cop_$1
mv $2 $1
mv cop_$1 $2
http://www.wojtekrj.net/2008/08/bash-script-to-swap-contents-of-files/
$ mv old tmp && mv curr old && mv tmp curr
is slightly more efficient!
Wrapped into reusable shell function:
function swap()
{
local TMPFILE=tmp.$$
mv "$1" $TMPFILE && mv "$2" "$1" && mv $TMPFILE "$2"
}
tmpfile=$(mktemp $(dirname "$file1")/XXXXXX)
mv "$file1" "$tmpfile"
mv "$file2" "$file1"
mv "$tmpfile" "$file2"