463 / 340 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
1

Что делает оператор ~~

24.06.2013, 06:13. Показов 3824. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Мне в руки попался вот такой код
Perl
1
2
if $s->{tl_links}{tl_start}
and ( $s->{tl_force_show_code} or $s->{remote_addr} ~~ @{ $s->{tl_link #...
Что делает оператор ~~? Что-то на него ругается среда исполнения.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.06.2013, 06:13
Ответы с готовыми решениями:

Что делает оператор //=
Здравствуйте! Наткнулся на одну строку в чужом коде. Что-то типа$user //= $user_tmp || 'abc';Что...

Определить язык и что делает программа
объясните в чем состоит эта задача((( не знаю этого языка, а тут вот такое #define N 20 ...

Что делает эта программа, и на каком языке она написана?
Товарищи, помогите, плз. :help: Что делает ниже написанная программа и на каком языке она...

Что за оператор такой string replace и что он делает?
Что за оператор такой string replace и что он делает???

8
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
24.06.2013, 12:08 2
Что за ошибку выдает?
Это оператор умного сравнения, smart matching, проверяет оба операнда и самостоятельно решает, как он их будет сравнивать. Более подробно смотри в книге "Шварц Р., Феникс Т., брайан д фой - Изучаем Perl, 5-е издание", глава 15. Умные сравнения и given-when.

Только учти, что начиная с Perl v5.18,

Возможности из семейства умного сравнения теперь являются экспериментальными, а код, который их использует, теперь выводит соответствующие предупреждения. Операторы ~~, given и when могут быть полностью переработаны или вообще убраны из языка в будущих версиях Perl. Основная причина этого изменения — чрезвычайно сложная и запутанная таблица действий в зависимости от типа аргументов этих операторов. Умное сравнение требует радикального пересмотра в сторону упрощения.
см. Ключевые изменения в Perl 5.18
2
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
24.06.2013, 12:24 3
В принципе выше @TheAthlete уже всё сказал, но если надо разобраться в коде, то вот неплохая статья с кучей примеров, как раз подтверждающих
Цитата Сообщение от TheAthlete Посмотреть сообщение
чрезвычайно сложная и запутанная таблица действий в зависимости от типа аргументов этих операторов
1
463 / 340 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
24.06.2013, 16:42  [ТС] 4
А как можно заменить этот оператор на обычные операторы сравнения?

Добавлено через 20 минут
Правильно ли я заменил ~~ конструкцией (A eq B) || (A == B)?
Perl
1
2
3
4
my tmp = $s->{tl_links}{tl_start}
            and ( $s->{tl_force_show_code} or $s->{remote_addr};
if ((tmp eq @{ $s->{tl_links}{tl_rb}}) || (tmp == @{ $self->{tl_links}{tl_rb}}))
{ $result .= $s->{tl_links}{tl_start}; }
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
24.06.2013, 17:04 5
Цитата Сообщение от body90 Посмотреть сообщение
Правильно ли я заменил ~~ конструкцией (A eq B) || (A == B)?
http://perldoc.perl.org/perlop... h-Operator
или
$ man perlsyn
Код
       Smart matching in detail

       The behaviour of a smart match depends on what type of thing its
       arguments are. The behaviour is determined by the following table: the
       first row that applies determines the match behaviour (which is thus
       mostly determined by the type of the right operand). Note that the
       smart match implicitly dereferences any non-blessed hash or array ref,
       so the "Hash" and "Array" entries apply in those cases. (For blessed
       references, the "Object" entries apply.)

       Note that the "Matching Code" column is not always an exact rendition.
       For example, the smart match operator short-circuits whenever possible,
       but "grep" does not.

           $a      $b        Type of Match Implied    Matching Code
           ======  =====     =====================    =============
           Any     undef     undefined                !defined $a

           Any     Object    invokes ~~ overloading on $object, or dies

           Hash    CodeRef   sub truth for each key[1] !grep { !$b->($_) } keys %$a
           Array   CodeRef   sub truth for each elt[1] !grep { !$b->($_) } @$a
           Any     CodeRef   scalar sub truth          $b->($a)

           Hash    Hash      hash keys identical (every key is found in both hashes)
           Array   Hash      hash keys intersection   grep { exists $b->{$_} } @$a
           Regex   Hash      hash key grep            grep /$a/, keys %$b
           undef   Hash      always false (undef can't be a key)
           Any     Hash      hash entry existence     exists $b->{$a}

           Hash    Array     hash keys intersection   grep { exists $a->{$_} } @$b
           Array   Array     arrays are comparable[2]
           Regex   Array     array grep               grep /$a/, @$b
           undef   Array     array contains undef     grep !defined, @$b
           Any     Array     match against an array element[3]
                                                      grep $a ~~ $_, @$b

           Hash    Regex     hash key grep            grep /$b/, keys %$a
           Array   Regex     array grep               grep /$b/, @$a
           Any     Regex     pattern match            $a =~ /$b/

           Object  Any       invokes ~~ overloading on $object, or falls back:
           Any     Num       numeric equality         $a == $b
           Num     numish[4] numeric equality         $a == $b
           undef   Any       undefined                !defined($b)
           Any     Any       string equality          $a eq $b

        1 - empty hashes or arrays will match.
        2 - that is, each element smart-matches the element of same index in the
            other array. [3]
        3 - If a circular reference is found, we fall back to referential equality.
        4 - either a real number, or a string that looks like a number
1
352 / 222 / 25
Регистрация: 30.09.2012
Сообщений: 548
24.06.2013, 19:08 6
Цитата Сообщение от body90 Посмотреть сообщение
Правильно ли я заменил ~~ конструкцией (A eq B) || (A == B)?
Если А и В оба строки или оба числа, то да, если другая комбинация или другие типы, то нет. Посмотрите табличку, приведенную @Vovan-VE, или сходите на статью, ссылку на которую я выкладывал в сообщении #3, там много примеров.
1
5981 / 1990 / 323
Регистрация: 10.12.2013
Сообщений: 6,853
26.07.2021, 20:53 7
ЛИСТАЯ СТАРЫЕ СТРАНИЦЫ
Что делает оператор ~~


в двухоперандном форме ~~, действительно, <smartmatch-operator>,
однако в унарной форме эта штука носит название 'червяк', живёт в репозитории 'Секретных операторов Perl'
и является функциональным аналогом scalar()

Bash
1
perl -e ' print ~~reverse "ABCD" '
если уберёте в выражении выше червяка, желаемого не увидите.
1
50 / 35 / 9
Регистрация: 13.06.2019
Сообщений: 204
27.07.2021, 13:02 8
1)
if это модификатор, раз скобок нет. Впереди должно быть выражение какое-нибудь.

я к тому что кусок кода вырезан как-то грубовато

2)
A or B ~~ C

это тоже что и

(A or B) ~~ C

это тоже как то странно особенно с учётом того что справа от smartmach - массив. Значит smartmach заглянет в каждый элемент массива.

3)
мне не понятна конструкция $A->{B}{C} так можно? и что это может значить?
0
5981 / 1990 / 323
Регистрация: 10.12.2013
Сообщений: 6,853
27.07.2021, 16:02 9
предполагаю, что мало кто пользуется smartmatch, очень уж всё зыбко;

eсть понятный grep, есть понятные функции из List::Util, smartmatch нмв не нужен.

Добавлено через 1 минуту
Цитата Сообщение от mark74 Посмотреть сообщение
мне не понятна конструкция $A->{B}{C} так можно? и что это может значить?

$A->{B}{C} - это синтакс.сахар для $A->{B}->{C}
1
27.07.2021, 16:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2021, 16:02
Помогаю со студенческими работами здесь

Что делает оператор >> в C++?
кто-нибудь может объяснить что конкретно делает оператор &gt;&gt; в C++. есть один пример. Там...

что делает оператор?
Добрый день. Подскажите пожалуйст, что делает следующий оператор: *b=(char *) malloc(1000000);

Что делает оператор => ?
Какую функцию выполнят оператор =&gt; в шарпе?

Что делает оператор Inc?
оператор inc что обозначает


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru