Значения по умолчанию для скользящих хэшей и нечетких автоматических переменных

String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true

Убедитесь, что вы понимаете, почему. Это потому, что сравнение == сравнивает только ссылки; equals() метод сопоставляет содержимое по символу.

Когда вы вызываете new для a и b, каждый получает новую ссылку, указывающую на "foo" в таблице строк. Ссылки разные, но контент один и тот же.

3
задан drclaw 10 March 2019 в 00:10
поделиться

1 ответ

my %hash is default(222)=(a=>0,b=>111);
sub test {say %_.default};   #using automatic parameter
test |%hash;  #outputs (Any)

Скольжение по определению означает превращение контейнера в список его элементов. То есть вы передаете не хеш, а его содержимое.

%_ собирает экземпляров переданных именованных аргументов. Это локальный хеш для блока, в котором он не имеет отношения к хешу, используемому для вставки аргументов. Его стандартным значением по умолчанию является значение по умолчанию, равное Any, точно так же, как и с объявленным my хешем:

my %foo;
say %foo.default; # (Any)

Существует ли метод передачи значения по умолчанию хэша при вставке в дополнительный вызов?

Вы можете сделать это:

my %hash is default(222)=(a=>0,b=>111);
sub test {say %_<hash-default>}
test |%hash, :hash-default(%hash.default);  #outputs 222
0
ответ дан raiph 10 March 2019 в 00:10
поделиться
Другие вопросы по тегам:

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