Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
1

доступ к мемберам класса (объекта) в perl

03.04.2011, 15:56. Просмотров 1332. Ответов 8
Метки нет (Все метки)


всем привет

помогите неграмотному
надо маленько перл-программу помодифицировать.

есть такое обращение:

$cp->{blabla} = $val;

а мне надо динамически туда несколько значений поместить,
например aaaValue, bbbValue и т.д.

предположим что первая часть хранится в $name = 'aaa'
могу я так записать:

$cp->{$name.'Value'} = $val;

?
или как такое организовать. что то типа reflection в java.

я так понял в perl мемберы нигде не объявляются. написал просто $cp->{asd} и уже оно существует.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2011, 15:56
Ответы с готовыми решениями:

Обращение к мемберам класса под другим именем
Здравствуйте. Возможно ли каким-то образом обращаться к мемберам под другими именами, но так,...

Доступ к элементу объекта класса
Приветствую! Недавно начала изучать Java, появился следующий вопрос: предположим, мы создаем...

Доступ к созданию объекта класса из вне
Привет! Только приступил к изучению классов. Столкнулся с вопросами на счёт конструктора и...

Доступ к методам класса без создания объекта
Почему доступны методы foo() и bar() класса А, если нет ни одного объекта это класса? #include...

8
0 / 0 / 1
Регистрация: 05.05.2010
Сообщений: 124
03.04.2011, 18:27 2
А по конкретней можно объяснить задачу.
Возможно тебе подойдет хэш хэшей. Например:

$hash{$name}{'Value'}=$val;
0
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
04.04.2011, 12:00  [ТС] 3
так. поконкретней.
есть уже программа, которая делает отчеты в эксель.
по заданным именам вытягивает данные из объекта.
наполнение объекта выглядит таким образом

$cp->{value1_name} = $val1;
$cp->{value2_name} = $val2;
и т.д.

в моем случае имена (value1_name,...) я узнаю только в момент исполнения.

знаю, что в perl можно вызывать функцию по ее имени, типа

$fname = 'setValue';
$cp->$fname(10);

можно ли таким же макаром обратиться к переменным объекта,

т.е. вместо
$cp->{value1_name} = $val1;

написать
$mname = 'value1_name';
$cp->{$mname} = $val1;

менять идеологию работы этой глюкалы я не хочу, да и не должен. нужно скажем так малой кровью модифицировать.
0
0 / 0 / 1
Регистрация: 05.05.2010
Сообщений: 124
04.04.2011, 13:15 4
//
знаю, что в perl можно вызывать функцию по ее имени, типа

$fname = 'setValue';
$cp->$fname(10);
//

Незнаю как это у вас получается. так вызывать функцию. Можно вызывать ее так:

$fname=setValue();

При условии что она возвращает данные в переменную.
Передавать же через переменную аргументы в функцию тем методом какой вы указали - нельзя. Здесь потребуется использовать tie (если конечно поребуется :-)))

Но вот эта конструкция работать должна:
//
можно ли таким же макаром обратиться к переменным объекта,

т.е. вместо
$cp->{value1_name} = $val1;

написать
$mname = 'value1_name';
$cp->{$mname} = $val1;
//
0
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
04.04.2011, 14:15  [ТС] 5
не, ну я же не сам эту фигню придумал.
по русски называется 'косвенный вызов метода'
по ангийски не знаю как

вот ссылка
http://cs.mipt.ru/docs/comp/rus/programming/languages/perl/perl_1/chapter13/13_2.htm

вот что там написано:

13.7. Косвенный вызов методов
Проблема
Требуется вызвать метод по имени, которое станет известно лишь во время выполнения программы.
Решение
Сохраните имя метода в строковом виде в скалярной переменной и укажите имя переменной там, где обычно указывается имя метода - справа от оператора ->:
$methname = 'flicker';
$obj->$methname(10); # Вызывает
$ob->riicker(10);
# Три метода объекта вызываются по именам
foreach $m ( qw(start run stop) ) { $obj->$m();
}
0
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
04.04.2011, 14:51  [ТС] 6
наконец таки удалось проверить идею.

вариант
$mname = 'value1_name';
$cp->{$mname} = $val1;

работает!

так что счастье радость
0
0 / 0 / 1
Регистрация: 05.05.2010
Сообщений: 124
04.04.2011, 15:46 7
//
не, ну я же не сам эту фигню придумал.
по русски называется 'косвенный вызов метода'
по ангийски не знаю как

вот ссылка
http://cs.mipt.ru/docs/comp/rus/programming/languages/perl/perl_1/chapter13/13_2.htm
//

Почитал я по этой ссылке... незнаю кто это писал, в общем идея-то правильная только они ее изложили как-то криво, да и вообще материла какой-то 'галопом по европам'. Использовать такое объявление метода можно не везде и невсегда. Об этом там ни слова, но это не важно - главное что у вас все получилось :-))
0
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 22
04.04.2011, 18:43  [ТС] 8
ну похоже что это отсюда:

Perl Cookbook
Tom Christiansen
Nathan Torkington
издательство O'REILLY

собсно видно кто написал
0
0 / 0 / 1
Регистрация: 05.05.2010
Сообщений: 124
04.04.2011, 18:47 9
Ааа ну понятно.. Это их стиль. Стиль а'ля camel-book :-).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2011, 18:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как получить доступ к переменным объекта класса-родителя?
Я знаю, что обычно передают указатель на объект класса в функцию чайлда, но вот как это сделать на...

Как получить доступ к методам объекта класса наследуемого от Activity, когда он выводится во вкладку
В главном Активити создаются вкладки на котовые выводятся другие активити. @Override ...

Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два
Здравствуйте. Подскажите что не правильно делаю, и возможно ли вообще - вызвать процедуру\функцию...

Создайте массив типа Employee и сохраните в него 3 объекта класса Employee и 3 объекта класса Manager
Здравствуйте! Задача: Создайте массив типа Employee и сохраните в него 3 объекта класса Employee...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.