Так я могу это выполнить. Странное изменение window.location не получилось отлично в хроме и сафари. Случается, что location.hash не создает запись в истории для хрома и сафари. Таким образом, вам придется использовать pushstate. Это работает для меня во всех браузерах.
history.pushState({ page: 1 }, "title 1", "#nbb");
window.onhashchange = function (event) {
window.location.hash = "nbb";
};
Я думаю, что вы можете быть после следующего, но, пожалуйста, скажите мне, если я ошибаюсь.
def replace_em(str, h)
str.gsub(/\S+/, Hash.new { |_,k| k }.merge(h))
end
h = { 'k1'=>'v1', 'k2'=>'v2' }
str = "Now is the k1 for all good persons to k2 to their friend k11"
replace_em(str, h)
#=> "Now is the v1 for all good persons to v2 to their friend k11"
/\S+/
соответствует строкам символов, которые не содержат пробелов.
g = Hash.new { |_,k| k }
создает пустой хеш с процедурой по умолчанию , которая заставляет g[k]
возвращать k
, если g
не имеет ключа k
.
g.merge(h)
возвращает хэш с процедурой по умолчанию, только что созданной с ключами и значениями из h
.
См. Документ для формы Hash :: new , которая принимает второй аргумент, который является хешем.