Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Generic методы String. (http://www.flasher.ru/forum/showthread.php?t=118200)

wvxvw 17.11.2008 19:35

Generic методы String.
 
Объясните, пожалуйста, что имелось в виду вот в этих строчках:
Цитата:

All the methods of the String class, except for concat(), fromCharCode(), slice(), and substr(), are generic, which means the methods call toString() before performing their operations, and you can use these methods with other non-String objects.

AL.exe 18.11.2008 00:04

Судя по тексту, получается, что все методы класса String также объявлены у всех классов, у которых есть метод toString() (и что он вызывается перед тем, как запустить выполнение метода).

UPD: ага, забавно:

Код AS3:

var a:String = "ASLNjcna"
var b:Array = [1,4,5,"adS",5,"gf"]
 
trace(a.lastIndexOf ("S"))  //1
trace(b.lastIndexOf ("adS"))  //3

А, ну да... ничего необычного нет - все эти методы (типа lastIndexOf у Array) действительно описаны в документации к классам, у которых есть toString.

Хотя, к примеру, toLowerCase у Array нету. Короче говоря, не стоит обращать особого внимания на этот абзац, имхо.

etc 18.11.2008 00:08

AL.exe, метод lastIndexOf есть у Array и вполне себе объявлен. А вот если попытаться применить такой метод к тому же Sprite, то ничего не выйдет.

AL.exe 18.11.2008 00:10

Да, да - я уже заметил, заглянув в документацию. В общем, не совсем соответствует абзац реальности, похоже.

DarkLight 18.11.2008 01:06

В абзаце имеется ввиду что эти методы универсальны по отношению к аргументу - их можно кормить переменными любого типа, т к все равно перед работой с аргументом ему устроят toString()

wvxvw 18.11.2008 01:27

Так тоже не катит...
Код AS3:

function func(str:String):void
{
        trace(str.toLowerCase());
        trace(str.concat(" !!!"));
}
 
var mc:MovieClip = new MovieClip();
func(mc);

Будет ошибка еще на этапе компиляции, так что даже в тело функции не зайдет...
Код AS3:

function func(str:Object):void
{
        trace(str.toLowerCase());
        trace(str.concat(" !!!"));
}
 
var mc:MovieClip = new MovieClip();
func(mc);

Если так, то будет ран-тайм ошибка на первой строчке функции...

А в таком варианте оба метода работают, опять же никакой разницы...
Код AS3:

function func(str:String):void
{
        trace(str.toLowerCase());
        trace(str.concat(" !!!"));
}
 
var mc:* = new MovieClip();
func(mc);


Смольный (Smolniy) 18.11.2008 13:28

Ровно этот же текст фигурирует в описании String в as2. Так что, видимо, фантом. Не берите в голову.
Лично я не раз находил в хелпе ошибки, не проходившие испытание тестом.

Волгоградец 18.11.2008 14:35

Немного не в тему спрошу, не хотел отдельную тему создавать:
В хэлпе для ключевого слова override написано:
Цитата:

You cannot use the override attribute on any of the following:
...
Methods that implement an interface method
...
Но метод родителя, реализующего интерфейс с интерфейсным методом переопределяется в потомке без проблем. Это тоже баг хэлпа или я чего-то не догнал...

etc 18.11.2008 14:49

Волгоградец, это смотря в каком контексте данный текст. Если это относится к интерфейсам, то всё верно.

Волгоградец 18.11.2008 15:11

__etc, не понял... Я могу унаследовать интерфейс от другого интерфейса и переопределить его методы, ошибки нет. Я могу унаследоваться от класса и переопределить метод, который в свою очередь реализован от интерфейса, нет ошибки.

upd.:
ой, сори в интерфейсах правда нельзя переопределяться. Значит это не баг хэлпа, а мой баг.


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

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