Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.01.2013, 14:43
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 1  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
По умолчанию Как правильно обратиться к локальной переменной и к параметру, если у них схожее имя?

Здравствуйте.
Подскажите, пожалуйста.
Есть метод-экземпляр, который содержит обязательный параметр 'parametr'.
Я внутри этого метода-экземпляра создаю локальную переменную с таким же именем, как и 'parametr'.
Задаю локальной переменной значение '1'. Когда я вызываю метод-экземпляр, то в качестве аргумента отсылаю '2'.
После этого пишу trace('Значение локальной переменной:',this.parametr,'Значение обязательного параметра:',parametr);. И тут возникает ошибка, будто бы parametr (this.parametr) не найден. Я так понимаю происходит поиск переменной в самом классе?
Заранее большое спасибо.

Старый 26.01.2013, 14:47
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Так делать нельзя, потому что аргументы функции и её локальные переменные находятся в одной области видимости.

Код AS3:
function someFunction(param:int):void {
    var param:int = 0; // так делать нельзя
    var newParam:int = param; // а так можно
}

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

Код AS3:
public class MyClass {
    public var myValue:int = 1;
 
    public function MyClass() {
        setValue(5);
    }
 
    public function setValue(myValue:int):void {
        trace(this.myValue); // 1
        trace(myValue) // 5
    }
}
__________________
adobe AS3 manual

Старый 26.01.2013, 14:55
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 3  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Цитата:
Сообщение от strangedk Посмотреть сообщение
Так делать нельзя, потому что аргументы функции и её локальные переменные находятся в одной области видимости.

Код AS3:
function someFunction(param:int):void {
    var param:int = 0; // так делать нельзя
    var newParam:int = param; // а так можно
}

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

Код AS3:
public class MyClass {
    public var myValue:int = 1;
 
    public function MyClass() {
        setValue(5);
    }
 
    public function setValue(myValue:int):void {
        trace(this.myValue); // 1
        trace(myValue) // 5
    }
}
Вот цитата с книги Колина Мука.
Цитата:
Обратите внимание, что, как и параметры, локальные переменные могут затенять
переменные и методы экземпляра, чьи имена совпадают с именами локальных
переменных. Локальная переменная также затеняет параметр метода с таким же
именем
, фактически переопределяя данный параметр и не оставляя программе
никакого шанса обратиться к нему.
Я совсем не понимаю.

Код AS3:
		public function doctrine()
		{
			//Вызываю метод экземпляр с одним обязательным параметров и качестве аргумента отсылаю число 10.
			myTested(10);
		}
		//Определяю метод-экземпляр myTested с модификатором управления доступом private, так как я не буду работать с этим методом-экземпляра в других классах.
		//Этому методу-экземпляру присваиваю один обязательный параметр.
		private function myTested(localVar)
		{
			var localVar:Number = 100;
			trace(localVar);
		}
//100

Старый 26.01.2013, 15:10
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 4  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
Обратите внимание, что, как и параметры, локальные переменные могут затенять
переменные и методы экземпляра, чьи имена совпадают с именами локальных
переменных. Локальная переменная также затеняет параметр метода с таким же
именем, фактически переопределяя данный параметр и не оставляя программе
никакого шанса обратиться к нему
.
Перечитайте несколько раз, вдумчиво. Пока не поймете.

Всё сработало так, как и написано
переменная объявленная внутри функции затеняет ту, которая в параметрах.

Обратиться на самом деле к ней можно, через arguments[0], но это уже ухищрения. Просто запомните что так делать не нужно.

*Я кажется понял, вы не понимаете что значит локальная переменная.
Локальная в вашем случае и есть localVar, а переменная класса это другое
__________________
adobe AS3 manual

Старый 26.01.2013, 16:45
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 5  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Как правильно обратиться к локальной переменной и к параметру, если у них схожее имя?
Переменную по-другому назвать.
Можно, конечно, магией через arguments, но под это одно предложение подходит:
"Китайские комсомольцы сами себе создают трудности, а потом сами их героически преодолевают"

Старый 26.01.2013, 16:53
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
если у них схожее имя?
Если выражаться точнее, то не схожее, а одинаковое. Если просто схожее, то пофиг, обращаться как обычно, так как схожесть эта только для человека, для программы они будут разными.

п.с. Так лучше вообще не делать никогда.

Старый 26.01.2013, 18:25
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 7  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Цитата:
Сообщение от strangedk Посмотреть сообщение
Перечитайте несколько раз, вдумчиво. Пока не поймете.

Всё сработало так, как и написано
переменная объявленная внутри функции затеняет ту, которая в параметрах.

Обратиться на самом деле к ней можно, через arguments[0], но это уже ухищрения. Просто запомните что так делать не нужно.

*Я кажется понял, вы не понимаете что значит локальная переменная.
Локальная в вашем случае и есть localVar, а переменная класса это другое
Тут говорится, что я не смогу обратиться к исходному значению параметра метода по той причине, что у локальной переменной будет тот же идентификатор, который, если он имеет значение, заменит исходное значение параметра на той значение, которое он имеет?

Хорошо, запомню.

Я понимаю, что значит и локальная переменная и переменная класса (экземпляра). То что описывает Колин Мук (обращение к переменной экземпляра с помощью выражения this в том случае, если у параметра метода экземпляра такое же имя) у меня получилось осуществить. Потом попробовал сделать то же самое но только с локальной переменной, не получилось и задал вопрос.

Добавлено через 1 минуту
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Если выражаться точнее, то не схожее, а одинаковое. Если просто схожее, то пофиг, обращаться как обычно, так как схожесть эта только для человека, для программы они будут разными.

п.с. Так лучше вообще не делать никогда.
"Схожее" я написал потому, что название темы было слишком длинное.

Хорошо, я не буду делать так.

Старый 26.01.2013, 18:40
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 8  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
Потом попробовал сделать то же самое но только с локальной переменной, не получилось и задал вопрос.
А то же самое не выйдет.

this это ссылка на самого себя, на экземпляр. Туда достучаться можно из любой вложенности функций, а вот доступ к конкретному scope (области видимости) да еще и с одинаковыми конфликтующими именами - будет получить сложнее.
__________________
adobe AS3 manual

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.