Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> неожиданная ошибка Useless use of private variable, Useless use of private variable in void  
:(
    Опции темы
sir_nuf_nuf
Дата 4.2.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



День добрый!

я хочу написать конструктор класса, который можно были бы вызывать как метод класса, так и как метод объекта

Код

package Foo;
use strict;
use warnings;
sub new 
{
    my ($class, $adaptee) = @_;
    $class = ref $class or $class;
    bless \$adaptee, $class;
}


однако на этой строке
Код

$class = ref $class or $class;


мы видим ошибку

Код

Useless use of private variable in void context


хотя вот такая строка работает
Код

$class = ref $class if ref $class;


кто подскажет в чем проблема ?


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
shamber
Дата 4.2.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



А может попробовать так
Код

package Foo;
use strict;
use warnings;
sub new 
{
    my ($class, $adaptee) = @_;
    my $proto  = ref ($class) || $class;
    bless \$adaptee, $proto;
}


PM MAIL Jabber   Вверх
sir_nuf_nuf
Дата 4.2.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



да да.. спасибо уже разобрался.
у оператора or оказался очень низкий приоритет =)


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
ginnie
Дата 4.2.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемый sir_nuf_nuf,

Цитата

у оператора or оказался очень низкий приоритет =)


как приоритет оператора or связан с указанной ошибкой?

Это сообщение отредактировал(а) ginnie - 4.2.2008, 14:16


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
KSURi
Дата 4.2.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Цитата(ginnie @  4.2.2008,  14:16 Найти цитируемый пост)
как приоритет оператора or связан с указанной ошибкой?

Судя по всему первый вариант интерпретировался вот так: $class = ref($class or $class);, соответственно интерпретатору не понравилось "выражение или выражение".
Правильный вариант my $proto  = ref ($class) || $class; интерпретируется как "присвоить тип ссылки, если выражение - ссылка, в противном случае присвоить само выражение (рез-тат)"



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ginnie
Дата 4.2.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемый KSURi, спасибо за Ваше пояснение (я тоже так подумал, но это не так, см. P.S.), но оно указывает на низкий приоритет вызова функции ref(), а не оператора or, поэтому я и задал вопрос sir_nuf_nuf.

P.S. Посмотрел приоритеты (в книге Programming Perl), а там написано, что

Код

ref $foo || die; # (ref $foo) || die;

т.е. || имеет приоритет ниже, чем ref (а or имеет приоритет ниже чем ||).

P.P.S. Разобрался, оказалось sir_nuf_nuf был абсолютно прав

Код

$class = ref $class or $class; # интерпретируется как ($class = ref $class) or $class;


Это сообщение отредактировал(а) ginnie - 4.2.2008, 15:32


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.