Кавычки вокруг хеша, включает хорошую практику в Perl?

Используйте низкоуровневый вызов $.ajax():

$.ajax({
  url: "/yourservlet",
  data: { },
  complete: function(xmlHttp) {
    // xmlHttp is a XMLHttpRquest object
    alert(xmlHttp.status);
  }
});

Попробуйте это для перенаправления:

if (xmlHttp.code != 200) {
  top.location.href = '/some/other/page';
}
32
задан Adam Bellaire 30 December 2008 в 23:58
поделиться

13 ответов

Когда определение постоянной строки хеширует ключи, необходимо всегда использовать (единственные) кавычки. Например, $hash{'key'} Это - лучший выбор, потому что он устраняет потребность думать об этой проблеме и результатах в последовательном форматировании. Если Вы иногда бросаете кавычки, необходимо не забыть добавлять их, когда ключ содержит внутренние дефисы, пробелы или другие специальные символы. Вы должны кавычки использования в тех случаях, ведя к непоследовательному форматированию (иногда закрывал кавычки, иногда заключаемый в кавычки). Заключенные в кавычки ключи более вероятно, будут, также выделены синтаксисом Вашим редактором.

Вот пример, где с помощью "заключаемый в кавычки иногда, не заключенные в кавычки другие времена" конвенция могут получить Вас в проблему:

$settings{unlink-devices} = 1; # I saved two characters!

Это скомпилирует очень хорошо под use strict, но не вполне сделает то, что Вы ожидаете во времени выполнения. Ключи хеша являются строками. Строки должны быть заключены в кавычки как подходящие для их содержания: одинарные кавычки для литеральных строк, двойные кавычки для разрешения интерполяции переменной. Заключите свои ключи хеша в кавычки. Это - самая безопасная конвенция и самое простое, чтобы понять и следовать.

27
ответ дан 27 November 2019 в 19:51
поделиться

Без кавычек лучше. Это находится в {}, таким образом, очевидно, что Вы не используете barewords, плюс он и легче считать и ввести (два меньше символов). Но все это зависит от программиста, конечно.

34
ответ дан 27 November 2019 в 19:51
поделиться

Я никогда ключи хеша одинарной кавычки. Я знаю, что {} в основном работает как кавычки, делают, кроме особых случаев (+, и двойные кавычки). Мой редактор знает это также и дает мне некоторые основанные на цвете сигналы, чтобы удостовериться, что я сделал то, что я предназначил.

Используя одинарные кавычки везде кажется мне как "защитная" практика, совершенная людьми, которые не знают Perl. Сохраните некоторый износ клавиатуры и изучите Perl :)

С напыщенной речью из пути, настоящая причина, я добавляю этот комментарий..., другие комментарии, кажется, пропустили то, которое + "закроет кавычки" bareword. Это означает, что можно записать:

sub foo {
    $hash{+shift} = 42;
}

или:

use constant foo => 'OH HAI';
$hash{+foo} = 'I AM A LOLCAT';

, Таким образом, довольно ясно, что +shift означает, "вызывают функцию сдвига", и shift означает "строку 'сдвиг'".

я также укажу, что cperl-режим выделяет все различные случаи правильно. Если это не делает, проверяет с помощью ping-запросов меня на IRC, и я зафиксирую его :)

(О, и еще одна вещь. Я действительно заключаю названия атрибута в кавычки у Американского лося, как в has 'foo' => .... Это - привычка, которую я перенял от работы с stevan, и хотя я думаю, что это выглядит хорошим... это немного несовместимо с остальной частью моего кода. Возможно, я прекращу делать его скоро.)

12
ответ дан 27 November 2019 в 19:51
поделиться

Ключи хеша Quoteless получили внимание уровня синтаксиса от Larry Wall, чтобы удостовериться, что не будет никакой причины для них отличаться от лучшей практики. Не потейте кавычки.

(Кстати, кавычки на ключах массива лучшая практика в PHP, и могут быть серьезные последствия для отказа использовать их, не говоря уже о тоннах E_WARNINGs. Хорошо в Perl! = хорошо в PHP.)

10
ответ дан 27 November 2019 в 19:51
поделиться

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

Это - вид той же причины, которую я использую " по умолчанию. Мне более свойственно шлепнуться переменная посреди строки, чем использовать символ, который я не хочу интерполированный. Который должен сказать, я чаще писал 'Hello, my name is $name', чем "You owe me $1000".

5
ответ дан 27 November 2019 в 19:51
поделиться

Я не думаю, что существует лучшая практика на этом. Лично я использую их в ключах хеша как так:

$ident{'name'} = standardize_name($name);

, но не используют их слева от оператора стрелки:

$ident = {name => standardize_name($name)};

не спрашивают меня, почему, это - просто способ, которым я делаю это :)

я думаю самая важная вещь, которую можно сделать, к всегда, всегда, всегда:

use strict;
use warnings; 

Тот способ, которым компилятор зафиксирует любые семантические ошибки для Вас, оставляя Вас менее вероятно для ввода с опечатками чего-то, какой бы ни путь Вы решаете пойти.

И вторая по важности вещь должно быть последовательным.

6
ответ дан 27 November 2019 в 19:51
поделиться

По крайней мере, заключение в кавычки предотвращают зарезервированные слова подсветки синтаксиса в not-so-perfect редакторах. Выезд:

$i{keys} = $a;
$i{values} = [1,2];
...
4
ответ дан 27 November 2019 в 19:51
поделиться

Я предпочитаю обходиться без помощи кавычек, если я не хочу некоторую строковую интерполяцию. И затем я использую двойные кавычки. Я уподобляю его литеральным числам. Perl действительно позволил бы Вам делать следующее:

$achoo['1']  = 'kleenex';
$achoo['14'] = 'hankies';

, Но никто не делает это. И это не помогает с ясностью, просто потому что мы добавляем еще два символа для ввода. Точно так же, как иногда мы конкретно хотим слот № 3 в массиве, иногда мы хотим PATH запись из %ENV. Единственное заключение в кавычки, которое это добавляет никакой ясность, что касается меня.

путь код синтаксических анализов Perl лишает возможности использовать другие типы "пустых слов" в индексе хеша.

Попытка

$myhash{shift}

и Вы только собираетесь сохранить объект в хеше под 'shift' ключ, необходимо сделать это

$myhash{shift()}

, чтобы указать, что Вы хотите, чтобы первый аргумент индексировал Ваш хеш.

, Кроме того, я использую jEdit, ТОЛЬКО визуальный редактор (что я видел - помимо emacs), который позволяет Вы полный контроль по выделению. Таким образом, это вдвойне ясно мне. Что-либо бывшее похожее на первого получает KEYWORD3 ($myhash) + СИМВОЛ ({) + LITERAL2 (сдвиг) + СИМВОЛ (}), если существует круглая скобка перед закрытием, изогнутым, это получает KEYWORD3 + СИМВОЛ + KEYWORD1 + СИМВОЛ (()}). Плюс я, вероятно, отформатирую его как это также:

$myhash{ shift() }
3
ответ дан 27 November 2019 в 19:51
поделиться

Это лучше с кавычками, потому что это позволяет Вам использовать специальные символы, не разрешенные в barewords. При помощи кавычек я могу использовать специальные символы своего родного языка в ключах хеша.

2
ответ дан 27 November 2019 в 19:51
поделиться

Пойдите с кавычками! Они визуально разбивают синтаксис, и больше редакторов будет поддерживать их в подсветке синтаксиса (эй, даже Переполнение стека выделяет версию кавычки). Я также утверждал бы, что Вы заметите опечатки, более быстрые с редакторами, проверяющими окончание кавычки.

3
ответ дан 27 November 2019 в 19:51
поделиться

Я задался вопросом об этом сам, особенно когда я нашел, что сделал некоторые ошибки:

 use constant CONSTANT => 'something';
 ...
 my %hash = ()
 $hash{CONSTANT}          = 'whoops!';  # Not what I intended
 $hash{word-with-hyphens} = 'whoops!';  # wrong again 

то, Что я склонен делать теперь, должно применить кавычки универсально на основе на хеш, если по крайней мере один из литеральных ключей нуждается в них; и используйте круглые скобки с константами:

 $hash{CONSTANT()} = 'ugly, but what can you do?';
1
ответ дан 27 November 2019 в 19:51
поделиться

Можно предшествовать ключу с" -" (минус символ) также, но знать, что это добавляет" -" к начало из ключа. Из части моего кода:

$args{-title} ||= "Intrig";

я использую одинарную кавычку, двойная кавычка, и без кавычки слишком. Все в той же программе :-)

2
ответ дан 27 November 2019 в 19:51
поделиться

Я всегда использовал их без кавычек, но я повторил бы использование строгих и предупреждения, поскольку они выбирают большинство частых ошибок.

0
ответ дан 27 November 2019 в 19:51
поделиться
Другие вопросы по тегам:

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