Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Вот набрёл в учебнике на такое: авторВ любой массив можно поместить список ссылок на другие программные объекты, например, таким образом: Код: perl 1. Можно записать то же самое более простым способом, поставив операцию взятия ссылки перед списком объектов в круглых скобках Код: perl 1. Не могу понять, почему эти записи эквивалентны? В первом - список ссылок, во втором - ссылка на массив - откуда там берётся список ссылок? Я конечно понимаю, что списочный контекст, но в этом случае должен получиться список с одного элемента, содержащий ссылку на массив. Объясните, пожалуйста, что там происходит. И ещё вопрос по ООП. Экземпляр класса создаётся вот так: Код: perl 1. Но оператор -> это обращение к элементу по ссылке. А Person - это имя класса (пакета), а не ссылка, как тогда к нему может применяться оператор -> ? Или неправильно понимаю? Дальнейшее обращение к методам - это понимаю, потому что объект уже создан, т.е. имеется ссылка на него. А до создания? По логике вещей должно быть вот так: Код: perl 1. так как Person - это пакет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2015, 18:27 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
jancoНе могу понять, почему эти записи эквивалентны?Так решили создатели языка. Читай тут: http://perldoc.perl.org/perlref.html#Making-References jancoИ ещё вопрос по ООП. ... так как Person - это пакет.Пакет это не класс. Пакет это уже сам по себе объект. Когда ты делаешь use P; ты уже создаешь синглтон P типа P. И да, можно сделать: Код: php 1. 2. Читать тут: http://perldoc.perl.org/perlobj.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2015, 19:36 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
White OwlТак решили создатели языка. Читай тут: http://perldoc.perl.org/perlref.html#Making-References Спасибо. С этим понятно. Решили так решили, только зачем такую глупость создавать для путаницы?.. White OwlПакет это не класс. Пакет это уже сам по себе объект. А тут не понял. Можете ткнуть конкретно в то предложение в документации, где такое написано? Я читаю: perldocA class is simply a package. A class provides methods that expect to operate on objects. Вы пишете что пакет это объект, они - что класс. Выходит объект и класс одно и то же. но это не так. Да и если бы пакет был объектом, то зачем тогда ещё вызвать конструктор? White OwlИ да, можно сделать: my $hobbit = Person->new(); my $orc = $hobbit->new(); Ну вторая инструкция мне понятна, так как $hobbit - это ссылка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2015, 20:39 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
jancoС этим понятно. Решили так решили, только зачем такую глупость создавать для путаницы?.. нет, ничего тебе не понятно; глупость.. Наехал на Ларри? это зря. совсем зря. @reference_list = (\$scalar, \@array, \%hash); в левой части списочная переменная, налицо списочный контекст. в правой перечисление. не массив, а перечисление; ( оператором перечисления является запятая ) если бы скобок не было, то в @reference_list попал бы только \%hash, a вот со скобками попали все участники перечисления. далее, упоминаемый тобой автор пишет: "поставив операцию взятия ссылки перед списком объектов в круглых скобках" и, надо отметить, правильно пишет, раз употребил слово операция; если это операция, то бэкслэш - это префиксный оператор взятия адреса, а аргументы в круглых скобках - параметры этого оператора. Ларри Уолл необычайно трепетно относится к языку и называть ажурность его построений глупостью - это юношеский максимализм в самых его уродливых формах )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2015, 22:09 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
едем дальше; Код: perl 1. забудь про C++, никакого отношения к C++ синтаксис Perl не имеет. здесь оператор стрелка -> это просто синтаксис вызова метода об'екта и означает он, что метод new получает при вызове первым аргументом строку "Person". стрелка -> ещё используется в качестве синтактического сахара при разыменовании ссылок, но это РАЗНЫЕ операции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2015, 22:23 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
ну и ещё: кроме языка Perl5 , теперь есть язык Per l6 ( и имеющий, кстати, такое же отношении к Perl5[/b] , как Perl5 к Python , например ) так вот, в Perl6 убраны все эти двусмысленные операторы, он на два порядка стройнее, абсолютно об'ектен и синтаксисом вызова методов об'ектов является, как это исторически сложилось в ЯП, [b]. - точка, никаких стрелок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2015, 23:24 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
jancoWhite OwlПакет это не класс. Пакет это уже сам по себе объект. А тут не понял. Можете ткнуть конкретно в то предложение в документации, где такое написано? An Object is Simply a Data Structure Да, "класс" это пакет. Но пакет это не "класс". Вернее это не класс в традиционном понятии этого слова. В традиционном ООП класс это просто шаблон описывающий какие данные будут хранится в объекте, и какие операции с этими данными можно делать. А тут (в пакете) мы изначально имеем хеш массив который содержит и места под данные и функции. janco Да и если бы пакет был объектом, то зачем тогда ещё вызвать конструктор?Чтобы создать еще один объект. Если тебе нужен один-единственный объект во всей программе, то можно с легкостью обойтись одним глобальным (который и является загруженным пакетом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2015, 00:12 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
volodin661едем дальше; здесь оператор стрелка -> это просто синтаксис вызова метода об'екта и означает он, что метод new получает при вызове первым аргументом строку "Person". стрелка -> ещё используется в качестве синтактического сахара при разыменовании ссылок, но это РАЗНЫЕ операции. В этом и вся фишка - разные операции. Теперь вопрос решён. Я рассматривал как разыменование ссылок. volodin661@reference_list = (\$scalar, \@array, \%hash); в левой части списочная переменная, налицо списочный контекст. Ну и что? Я это предложение понимаю: там всё как должно быть - список ссылок. Не понятно вот это: @reference_list = \($scalar, @array, %hash); volodin661далее, упоминаемый тобой автор пишет: "поставив операцию взятия ссылки перед списком объектов в круглых скобках" и, надо отметить, правильно пишет, раз употребил слово операция; если это операция, то бэкслэш - это префиксный оператор взятия адреса, а аргументы в круглых скобках - параметры этого оператора. Какие параметры оператора? У оператора есть операнды, а раз \ - унарный оператор то у него может быть один операнд. Далее, упоминаемый мною автор пишет: авторСпособом представления значения списка в программе является списочный литерал, который записывается в виде последовательности значений, разделенных запятыми и заключенных в круглые скобки . Т.е. скобки вместе с запятой описывают перечисление, а не являются разделителем аргументов. Это же не функция. ($scalar, @array, %hash) - список Если к нему применить оператор \ то должна возвращаться одна ссылка на список , а получаются 3 ссылки на три элемента списка. Ну если такие "магические" непонятно чем объяснимые превращения - это трепетное отношение к языку - так тому и быть. Я не порицаю Уолла - как сделал, так сделал. Это его право как автора. Я хочу понять, можно ли объяснить как и почему ссылка на список превращается в список ссылок? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2015, 16:38 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
janco($scalar, @array, %hash) - список нет. это не список. это перечисление. можешь проверить Код: php 1. если справа список, то значением $s будет 3, а если нет, то последний член но в списочном контексте, да, перечисление вернёт список. оператор \ применённый к перечислению в списочном контексте вернёт список ссылок. оператор \ применённый к перечислению в скалярном контексте вернёт ссылку на последний операнд оператор \ применённый к списочной переменной в круглых скобках \(@list) в списочном контексте вернёт список ссылок членов списка (в качестве особого случая). оператор \ применённый к хэш-переменной в круглых скобках \(%hash) в списочном контексте вернёт список ссылок на ключи и значения (в качестве особого случая). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2015, 06:58 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
volodin661оператор \ применённый к перечислению в списочном контексте вернёт список ссылок. Спасибо, но Вы мне констатируете то, что есть. Я это уже прочитал в учебнике. Вопрос стоит почему и каким магическим превращением это происходит ? Или спрошу по другому: какое выражение надо написать, чтобы получить ссылку на список переменных ? Вы пишете: volodin661оператор \ применённый к перечислению в скалярном контексте вернёт ссылку на последний операнд Как получить ссылку не на последний операнд, а на всё перечисление? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2015, 21:23 |
|
||
|
Вопрос по языку Perl (ссылки и конструктор)
|
|||
|---|---|---|---|
|
#18+
jancovolodin661оператор \ применённый к перечислению в списочном контексте вернёт список ссылок. Спасибо, но Вы мне констатируете то, что есть. Я это уже прочитал в учебнике. Вопрос стоит почему и каким магическим превращением это происходит ? Или спрошу по другому: какое выражение надо написать, чтобы получить ссылку на список переменных ? Вы пишете: volodin661оператор \ применённый к перечислению в скалярном контексте вернёт ссылку на последний операнд Как получить ссылку не на последний операнд, а на всё перечисление? http://perldoc.perl.org/perlref.html#Making-References ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2015, 22:02 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38967419&tid=1461750]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
73ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 397ms |

| 0 / 0 |
