Ve svém blogu o strojopisu, Mark Rendle říká, že jedna z věcí, která se mu líbí na tom je:
„Strukturální psaní pro rozhraní. Opravdu bych si přál C # mohl udělat“
Co jste tím myslel?
Ve svém blogu o strojopisu, Mark Rendle říká, že jedna z věcí, která se mu líbí na tom je:
„Strukturální psaní pro rozhraní. Opravdu bych si přál C # mohl udělat“
Co jste tím myslel?
V podstatě to znamená, že rozhraní jsou porovnávány na „kachna psaní“ bázi, nikoli na základě typu identity.
Předpokládejme následující C # kód:
interface X1 { string Name { get; } }
interface X2 { string Name { get; } }
// ... later
X1 a = null;
X2 b = a; // Compile error! X1 and X2 are not compatible
A ekvivalent strojopisem kód:
interface X1 { name: string; }
interface X2 { name: string; }
var a: X1 = null;
var b: X2 = a; // OK: X1 and X2 have the same members, so they are compatible
Spec nepokrývá to v hodně podrobně, ale třídy mají „značek“, což znamená stejný kód, které s třídami namísto rozhraní, bude mít chybu. C # rozhraní mají značky, a tudíž nemůže být implicitně převeden.
Nejjednodušší způsob, jak přemýšlet o tom, že pokud se pokusí o převod z rozhraní X rozhraní Y, pokud X má všechny členy Y, konverze úspěšná, přestože X a Y nemusí mít stejné názvy.
Přemýšlet o.
class Employee { fire: = ..., otherMethod: = ...}
class Missile { fire: = ..., yetMoreMethod: = ...}
interface ICanFire { fire: = ...}
val e = new Employee
val m = new Missile
ICanFire bigGuy = if(util.Random.nextBoolean) e else m
bigGuy.fire
Co kdybychom řekli:
interface IButtonEvent { fire: = ...}
interface IMouseButtonEvent { fire: = ...}
...
Strojopisem umožní to, nebude C #.
Jako strojopis si klade za cíl, aby dobře pracovat s DOM, který používá „volný“ psát, to je jediný rozumný výběr pro strojopisem.
Nechám na čtenáři, aby rozhodl, zda se jim líbí „Strukturální psaní“ ... ..