Hva er "Structural Typing for grensesnitt" i Loggfila

stemmer
17

I sin bloggpost om maskinskrevet manuskript, er Mark Rendle sa at en av de tingene han liker om det er:

Strukturelle skrive for grensesnitt. Jeg skulle ønske C # kunne gjøre det

Hva mente han med det?

Publisert på 04/10/2012 klokken 05:08
kilden bruker
På andre språk...                            


2 svar

stemmer
18

I utgangspunktet betyr det at grensesnittene er sammenlignet på en "duck skrive" basis i stedet for på en type identitet basis.

Vurder følgende C # -kode:

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

Og tilsvarende Loggfila kode:

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

Spesifikasjonen dekker ikke dette i mye detalj, men klasser har "merkevarer" som betyr den samme koden, skrevet med klasser i stedet for grensesnitt, ville ha en feil. C # grensesnitt har merker, og dermed ikke kan implisitt konverteres.

Den enkleste måten å tenke på det er at hvis du forsøker en konvertering fra grensesnitt X til grensesnitt Y, hvis X har alle medlemmer av Y, konverteringen lykkes, selv om X og Y ikke kan ha samme navn.

Svarte 04/10/2012 kl. 05:29
kilden bruker

stemmer
1

Tenk om.

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

Hva om vi sa:

interface IButtonEvent { fire: = ...}
interface IMouseButtonEvent { fire: = ...}
...

Loggfila vil tillate dette, vil C # ikke.

Som Loggfila som mål å fungere godt med DOM som bruker “løs” å skrive, er det eneste fornuftige å velge for typescript.

Jeg lar det være opp til leseren å avgjøre om de liker “Structural skrive” ... ..

Svarte 12/02/2014 kl. 15:40
kilden bruker

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