Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   подключение не работает, если переменная называется vk, а не VK (http://www.flasher.ru/forum/showthread.php?t=197752)

zzSpirit 12.04.2013 14:08

подключение не работает, если переменная называется vk, а не VK
 
Бился очень долго над этой проблемой... Измучился, ошибку нашел. Но непонятно почему так происходит.

Вот рабочий код, замените flashVars на свои данные и протестируйте. код ниже работает и выведет список друзей в output-панели. Но! Если заменить переменную VK на vk - то код сразу не работает и выдает ошибку:
Код:

1180: Call to a possibly undefined method api.
Код AS3:

package{
        import vk.APIConnection;
        import flash.display.*;
 
        public class Main extends MovieClip{
 
                public function Main():void
                {
                        var flashVars:Object = stage.loaderInfo.parameters as Object;
 
                        flashVars['api_id'] = 3548968;
                        flashVars['viewer_id'] = 206137835;
                        flashVars['sid'] = "760e0e9cda4c19eb9851b7419e550e728b083d3304a62c8e9d0dfd93dc6a39c09b28af6e373bfad92ce88";
                        flashVars['secret'] = "2642da876c";
 
                        var VK:APIConnection = new APIConnection(flashVars);
                        VK.api('friends.get',{},vkGetFriends,vkError);
                }
 
                private function vkGetFriends(r:Object):void{}
                private function  vkError(r:Object):void{}
        }
}

Хотя если написать:
Код AS3:

var vk:String = 'ya cheburashka';
trace(vk);

то переменная работает.

C4Grey 12.04.2013 18:53

имя переменной совпадает с названием пакета vk:
import vk.APIConnection;
а у пакета такого метода как api, само-собой, нету :)
Советую использовать префиксы для переменных: v/l для локальных, F для полей классов, A для аргументов функций, так меньше путаницы подобной будет.

Hauts 12.04.2013 18:58

C4Grey, ничего себе у вас советы.

zzSpirit 12.04.2013 22:07

Цитата:

Сообщение от C4Grey (Сообщение 1129511)
имя переменной совпадает с названием пакета vk:
import vk.APIConnection;
а у пакета такого метода как api, само-собой, нету :)
Советую использовать префиксы для переменных: v/l для локальных, F для полей классов, A для аргументов функций, так меньше путаницы подобной будет.

Ааа, теперь понял. Что-то я не думал что имя пакета как-то с переменной может конфликтовать. Вообще считал что пакеты тока в import импортируются и просто так вызываться не могут.

Не очень хочется кучу префиксов использовать, буду использовать только _ перед переменными, поскольку часто конфликт с такими переменными, как name, speed и подобными возникает.

Спасибо.

Добавлено через 3 минуты
Но всетаки не понятно, почему
Код AS3:

var vk:String = 'ya cheburashka';
trace(vk);

не вызывает конфликт, а
Код AS3:

var vk:APIConnection = new APIConnection(flashVars);
vk.api('friends.get',{},vkGetFriends,vkError);

вызывает?

Темболее, это локальная переменная в функции(конструкторе)
Методы в переменных как имя пакета нельзя использовать, а сами переменные можно? путаница какая-то...

Добавлено через 8 часов 0 минут
Нет, я всетаки ничего не пойму. Сейчас все снова написал, теперь работает с переменной vk все ок. Возможно потому, что пакет vk в корне, а все остальные файлы в пакете src?

Добавлено через 8 часов 7 минут
Ага, из-за этого... Написал в главном классе import vk.APIConnection; и выдало ту же ошибку. (код подключения к VK в другом классе-синглтоне)
Вопрос решен.

caseyryan 13.04.2013 12:43

Цитата:

Советую использовать префиксы для переменных: v/l для локальных, F для полей классов, A для аргументов функций, так меньше путаницы подобной будет.
Ужас. Не надо таких советов давать. Есть конвенции, и лучше следовать им

C4Grey 13.04.2013 18:33

Забыл добавить "например". Не только на AS пишу, и работаю часто с одними испанцами, у них этот Delphi-стиль корпоративное достояние :) . Ну и привык, мне теперь конструкции вида
Код AS3:

private var _name:String;

глаз режут...Мне-то главное чтобы можно было отличить где аргумент, где локальная переменная, и где поле класса, а такой подход вполне оправдан, если для себя пишу. Ну а топикстартеру советую тогда это:
http://www.flasher.ru/forum/blog.php?bt=1872, или это: http://romaniac.ru/flex-sdk-coding-conventions ...Что-то они местами отличаются, но то такое :)
А вообще...процитирую одну книжку:
"-Трейсер — тот же паркурист, — отмахнулся Тема. — Просто кому-то захотелось назвать паркуристов трейсерами — «прокладывающими пути». Уж не знаю, откуда взялось это слово, но до появления одноименной паркур-команды ни о чем подобном никто не слышал. Зато теперь любой шкет скажет, что паркуристами себя называют только неудачники.
-Ну это обычное дело. Людям только дай повод наехать на других."
Алекс Кош, "Игры масок".


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

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