Теперь рассмотрим следующий код:
blockquote>void print_double(const double d){ printf("d = %lf\n", d); } int main(int args, const char *argv[]){ double d = 10.2; print_double(d); }
Ваш код не имеет псевдонимов.
d
в main иd
вprint_double
являются различными объектами, поскольку аргументы всегда передаются по значению. Но если бы мы «исправили» пример:void print_double(const double *pd){ printf("d = %lf\n", *pd); } int main(int args, const char *argv[]){ double d = 10.2; print_double(&d); }
Это все еще хорошо определено.
*pd
является lvalue типаconst double
.const double
является квалифицированной версиейdouble
. Все типы совместимы между собой (тривиально). Таким образом, вторая пуля имеет место, и этот псевдоним действителен.
Можно использовать link_to_function
(удаленный в направляющих 4.1):
link_to_function 'My link with obtrusive JavaScript', 'alert("Oh no!")'
Или, если абсолютно необходимо использовать link_to
:
link_to 'Another link with obtrusive JavaScript', '#',
:onclick => 'alert("Please no!")'
Однако исправление JavaScript в Ваш сгенерированный HTML является навязчивым, и является плохой практикой.
Вместо этого Ваш код направляющих должен просто быть чем-то вроде этого:
link_to 'Link with unobtrusive JavaScript',
'/actual/url/in/case/javascript/is/broken',
:id => 'my-link'
И принятие Вас использует Прототип платформа JS, JS как это в Вашем application.js
:
$('my-link').observe('click', function (event) {
alert('Hooray!');
event.stop(); // Prevent link from following through to its given href
});
Или если Вы используете jQuery:
$('#my-link').click(function (event) {
alert('Hooray!');
event.preventDefault(); // Prevent link from following its href
});
При помощи этой третьей техники Вы гарантируете, что ссылка будет следовать до некоторой другой страницы — не, только перестали работать тихо — если JavaScript недоступен пользователю. Помните, JS мог быть недоступным, потому что у пользователя есть плохое интернет-соединение (например, мобильное устройство, общедоступный Wi-Fi), пользователь или системный администратор пользователя отключили его, или неожиданная ошибка JS произошла (т.е. ошибка разработчика).