Typ kontrola třídou strojopisem

hlasů
107

Jsem velmi nadšený strojopisu , takže jsem začal hrát s ním. Jako developer ActionScript, to dělá Javascript méně tvrdý.

Nicméně, v jazyce ActionScript je možné zjistit typ při spuštění pomocí operátoru je :

var mySprite:Sprite = new Sprite(); 
trace(mySprite is Sprite); // true 
trace(mySprite is DisplayObject);// true 
trace(mySprite is IEventDispatcher); // true

Je možné zjistit, zda proměnná (rozšiřuje nebo) je určitá třída nebo rozhraní s psacím stroji? Nemohl jsem najít nic o tom v jazykových specifikací, mělo by tam být při práci s třídami / rozhraní.


Aktualizace: O několik let později. I spadl strojopisu velmi rychle a začít používat haXe který sestavuje vynikající JavaScriptu a má skutečnou kontrolu typu, který pracuje na třídách, rozhraní atd. Také má odstranit mrtvý kód, lepší výčty, abstraktní typy a kompilovat časové funkce (makra), také sestavuje do jednoho souboru, takže není třeba provádět komplexní balík build systém.

Položena 08/10/2012 v 21:47
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
142

4.19.4 Provozovatel instanceof

instanceofOperátor vyžaduje levý operand být typu existuje, typ objektu, nebo typ parametru typu, a právo operand být typu Any nebo podtyp ‚funkcí‘ typem rozhraní. Výsledkem je vždy booleovské primitivního typu.

Takže můžete použít

mySprite instanceof Sprite;

Všimněte si, že tento operátor je také v jazyce ActionScript, ale to by neměl být používán tam ještě:

Provozovatel je, což je ActionScript 3.0 nový, umožňuje testovat, zda je proměnná nebo výraz členem daného datového typu. V předchozích verzích jazyka ActionScript, provozovatel instanceof předpokladu tuto funkci, ale v jazyce ActionScript 3.0 operátor instanceof by neměl být používán k testování datového typu členství. Operátor by měl být použit namísto operátoru instanceof pro kontrolu Circuit, protože výraz x instanceof y pouze kontroluje prototypový řetězec x pro existenci y (av ActionScript 3.0 prototypový řetězec neposkytuje kompletní obraz hierarchie dědičnosti).

Strojopis je instanceofsdílí stejné problémy. Jelikož se jedná o jazyk, který je stále v jeho vývoji doporučuji uvést návrh takového zařízení.

Viz také:

Odpovězeno 08/10/2012 v 21:54
zdroj uživatelem

hlasů
8

Strojopisem mají způsob ověřování typ proměnné v běhu. Můžete přidat ověřující funkci, která vrací typ predikátu . Takže můžete volat tuto funkci uvnitř příkazu if, a mít jistotu, že všechny kód uvnitř tohoto bloku je bezpečné používat jako typ si myslíte, že je.

Příklad z typescript dokumenty:

function isFish(pet: Fish | Bird): pet is Fish {
   return (<Fish>pet).swim !== undefined;
}

// Both calls to 'swim' and 'fly' are now okay.
if (isFish(pet)) {
  pet.swim();
}
else {
  pet.fly();
}

Více na: https://www.typescriptlang.org/docs/handbook/advanced-types.html

Odpovězeno 21/11/2016 v 10:42
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more