Co je to „Strukturální Typing pro rozhraní“ na psacím stroji

hlasů
17

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?

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


2 odpovědí

hlasů
18

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.

Odpovězeno 04/10/2012 v 06:29
zdroj uživatelem

hlasů
1

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í“ ... ..

Odpovězeno 12/02/2014 v 16:40
zdroj uživatelem

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