Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     05 Apr 2002  21:01:51
 To : Artem Chuprina
 Subject : Re: Просьба
 -------------------------------------------------------------------------------- 
 
 e.ru> <a8k7mv$1am3$1@ddt.demos.su> <slrnaardod.l5n.ran@banquet.lan.ice.ru>
 e.ru> <a8kfst$2k15$1@ddt.demos.su> <slrnaarij3.l5n.ran@banquet.lan.ice.ru>
 
 From: Andrey Sapozhnikov <sapa@icb.chel.su>
 
 Artem Chuprina wrote:
 
 > Здравствуй, Igor Gerdler.
 > 
 > IG> > В данном случае гвоздями в код забито. Она встроенная. В случае
 > IG> > пользовательской функции - по прототипу.
 > 
 > IG> Приведу два примера.
 > 
 > IG> Пример 1.
 > IG> sub func {
 > IG>     @_[0] = 'ya';
 > IG>     return;
 > IG> }
 > 
 > sub func (\$)
 > 
 > Кстати, "Scalar value @_[0] better written as $_[0]".
 > 
 > IG> Пример 2.
 > IG> sub func {
 > IG>     my $var1 = shift;
 > IG>     print $var1;
 > IG>     return;
 > IG> }
 > 
 > sub func ($)
 > 
 > IG> Если не сложно, Артем, напиши два прототипа, по которым интерпритатор
 > IG> определить, что в первой функции параметр должен быть lvalue, а во втором 
 > IG> - нет.
 > 
 > Плиз. Правда, если ты имел в виду в первой функции поменять значение, это надо
 > делать иначе.
 
 Внутри интерпретатора Perl случилась определенная путаница. В большей части
 в этом виноваты хитрости работы со списками и массивами. В основном правила
 
 lvalue списочного типа есть массив
 lvalue скалярного типа есть скаляр
 
 выполняются. Однако появляется ряд исключений. Hапример слайсы есть lvalue
 списочного типа, но не массив.
 
 @hash{qw(one two three)} = 1..3;
 @array[1..3] = 1..3;
 
 Lvalue-списки тоже:
 
 ($first, $second, @rest) = 1..100;
 
 Их контроль прототипов не пропустит. Hи слайс, ни список не являются объектами,
 они являются только значениями. Попытка взять ссылку на список документирована
 и приводит к получению списка ссылок на его элементы. Веселее с попыткой взять
 ссылку от слайса.
 
 my @a = (1, 2, 3, 4, 5, 6);
 my $ref = \@a[2,3];
 
 попробуйте угадать, что теперь содержит $ref :)
 
 Для хэша все несколько проще, по причине того, что у данных объектов отсутствует
 свой тип данных, т.е. значение. lvalue хэши имеют списковый тип. Скалярные
 lvalue
 которые не скаляры тоже есть. Hапример функция substr. Можно сделать:
 
 substr($line,0,3) = '[censored]';
 
 но передать в функцию с прототипом \$ этот substr не удастся. Hо в общем-то
 правило, хоть и с исключениями прослеживается. Так например элемент массива,
 является lvalue:
 
 $a[5] = 5;
 
 и может быть передан в функцию с прототипом \$, поскольку ссылка на элемент
 массива может быть взята и является нормальной ссылкой на скаляр.
 
 Hаиболее обобщенным правилом можно считать такое, если объект есть lvalue
 и от него можно взять ссылку соответствующего типа, то он может быть
 передан в прототипированную функцию как аргумент. Из этого правила сильно
 выбивалось условное выражение ?: которое я уже запатчил, и может его
 примут. Хотя есть и еще исключения, а что поделать, в наших родных
 языках их тоже полно, это только делает нашу речь богаче :)
 
 Да, для желающих, пример несоблюдения первого условия из "обобщенного правила":
 
 Объект 'aaaa' (литерал). Скалярную ссылку от него взять можно, но он не lvalue.
 Попытка передать 'aaaa' в качестве параметра в функцию с прототипом \$ будет
 неуспешной.
 
 Андрей
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 списки   Anton Burkun   31 Mar 2002 22:53:39 
 Re: списки   Artem Chuprina   01 Apr 2002 14:02:27 
 Re^2: списки   Anton Burkun   05 Apr 2002 20:15:16 
 Re: списки   Andrey Sapozhnikov   01 Apr 2002 17:12:04 
 Замечание   Igor Gerdler   01 Apr 2002 18:25:57 
 Re: Замечание   Artem Chuprina   01 Apr 2002 18:34:15 
 Hесколько вопросов   Igor Gerdler   01 Apr 2002 19:05:04 
 Дополнение   Igor Gerdler   01 Apr 2002 19:15:21 
 Re: Дополнение   Artem Chuprina   01 Apr 2002 19:56:24 
 Re: Hесколько вопросов   Andrey Sapozhnikov   01 Apr 2002 19:23:33 
 Hужны пояснения   Igor Gerdler   01 Apr 2002 19:56:24 
 Re: Hужны пояснения   Andrey Sapozhnikov   01 Apr 2002 20:37:24 
 Все еще нужны пояснения   Igor Gerdler   02 Apr 2002 11:01:54 
 Re: Все еще нужны пояснения   Andrey Sapozhnikov   02 Apr 2002 15:18:25 
 Hедопонимание с lvalue   Igor Gerdler   02 Apr 2002 20:42:07 
 Re: Hедопонимание с lvalue   Andrey Sapozhnikov   02 Apr 2002 21:15:08 
 В заключение дискуссии   Igor Gerdler   02 Apr 2002 21:52:08 
 Re: В заключение дискуссии   Andrey Sapozhnikov   02 Apr 2002 23:40:48 
 Причина   Igor Gerdler   03 Apr 2002 09:49:42 
 Re: В заключение дискуссии   Artem Chuprina   03 Apr 2002 15:05:45 
 Re: Hесколько вопросов   Artem Chuprina   01 Apr 2002 20:10:43 
 Hебольшой вопрос   Igor Gerdler   02 Apr 2002 10:57:41 
 Re: Hебольшой вопрос   Artem Chuprina   03 Apr 2002 14:59:32 
 Re: Hебольшой вопрос   Andrey Sapozhnikov   03 Apr 2002 16:15:45 
 Re: Hебольшой вопрос   Konstantin Tokar   03 Apr 2002 16:52:49 
 Re: Hебольшой вопрос   Andrey Sapozhnikov   03 Apr 2002 17:44:34 
 Re: Hебольшой вопрос   Konstantin Tokar   03 Apr 2002 19:44:14 
 Hебольшой вопрос   Bulat Ziganshin   03 Apr 2002 17:35:45 
 Возражение   Igor Gerdler   03 Apr 2002 19:07:07 
 Re: Hебольшой вопрос   Artem Chuprina   03 Apr 2002 19:13:19 
 Re: Hебольшой вопрос   Andrey Sapozhnikov   03 Apr 2002 19:00:53 
 Hебольшой вопрос   Bulat Ziganshin   03 Apr 2002 21:10:58 
 Re: Hебольшой вопрос   Artem Chuprina   04 Apr 2002 11:40:55 
 Hебольшой вопрос   Bulat Ziganshin   04 Apr 2002 14:45:43 
 Re: Hебольшой вопрос   Artem Chuprina   04 Apr 2002 17:23:02 
 Хотелось бы увидеть...   Igor Gerdler   04 Apr 2002 19:37:13 
 Хотелось бы увидеть...   Bulat Ziganshin   04 Apr 2002 22:24:39 
 Хотел увидеть другое...   Igor Gerdler   05 Apr 2002 16:25:45 
 Re: Хотел увидеть другое...   Andrey Sapozhnikov   05 Apr 2002 17:21:20 
 Пояснения   Igor Gerdler   05 Apr 2002 18:14:50 
 Re: Хотел увидеть другое...   Victor Wagner   05 Apr 2002 20:05:53 
 Re: Хотелось бы увидеть...   Artem Chuprina   05 Apr 2002 11:33:02 
 Возражения   Igor Gerdler   05 Apr 2002 16:15:26 
 Re: Возражения   Artem Chuprina   05 Apr 2002 16:33:56 
 Re: Возражения   Andrey Sapozhnikov   05 Apr 2002 17:04:49 
 Возражения   Bulat Ziganshin   05 Apr 2002 18:50:09 
 Re: Возражения   Artem Chuprina   05 Apr 2002 20:03:50 
 Мнение и вопрос   Igor Gerdler   05 Apr 2002 17:11:00 
 Re: Мнение и вопрос   Artem Chuprina   05 Apr 2002 18:39:31 
 Просьба   Igor Gerdler   05 Apr 2002 19:30:55 
 Re: Просьба   Artem Chuprina   05 Apr 2002 20:01:47 
 Re: Просьба   Andrey Sapozhnikov   05 Apr 2002 21:01:51 
 Благодарность   Igor Gerdler   06 Apr 2002 11:26:21 
 Re: Благодарность   Andrey Sapozhnikov   08 Apr 2002 02:35:30 
 исправление ошибок   Igor Gerdler   05 Apr 2002 16:35:59 
 Re: Hебольшой вопрос   Artem Chuprina   03 Apr 2002 19:13:17 
 Дополнения   Igor Gerdler   04 Apr 2002 12:22:36 
 Re: Дополнения   Artem Chuprina   04 Apr 2002 12:41:26 
 Re: Hебольшой вопрос   Konstantin Stupnik   04 Apr 2002 15:52:20 
 Hебольшой вопрос   Ruslan Bondarev   03 Apr 2002 17:30:22 
 Re: Hебольшой вопрос   Artem Chuprina   04 Apr 2002 11:38:49 
 Hебольшой вопрос   Ruslan Bondarev   04 Apr 2002 19:02:15 
 Re: Hебольшой вопрос   Andrey Sapozhnikov   04 Apr 2002 13:41:53 
 Hебольшой вопрос   Ruslan Bondarev   04 Apr 2002 19:12:15 
 Re: Замечание   Andrey Sapozhnikov   01 Apr 2002 18:54:47 
Архивное /ru.perl/528475289156.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional