Assemblyscript: ์ œ๋„ค๋ฆญ ์œ ํ˜•์—์„œ ์ •์  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?<t>?</t>

์— ๋งŒ๋“  2019๋…„ 03์›” 15์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: AssemblyScript/assemblyscript

์˜ˆ:

class Temp {
  static decode(buf: Uint8Array): Temp {
    return new Temp(); 
  }
}

function decode<T>(buf: Uint8Array): T {
  return T.decode(buf);
}

let a = decode<Temp>(new Uint8Array());
question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•„๋‹ˆ์š”, ์ด๊ฒƒ์€ ํƒ€์ดํ”„ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class Base {
  static decode<T>(buf: Uint8Array): T {
    return instantiate<T>(); // `instantiate` is AssemblyScript's builtin
  }
}

class Temp extends Base {
}

let a = Base.decode<Temp>(new Uint8Array(1));

๋ชจ๋“  3 ๋Œ“๊ธ€

์•„๋‹ˆ์š”, ์ด๊ฒƒ์€ ํƒ€์ดํ”„ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class Base {
  static decode<T>(buf: Uint8Array): T {
    return instantiate<T>(); // `instantiate` is AssemblyScript's builtin
  }
}

class Temp extends Base {
}

let a = Base.decode<Temp>(new Uint8Array(1));

์ถœ๋ ฅ์ด ์ฐธ์กฐ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด changetype ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

changetype<T>(changetype<usize>(T.decode(buf)));

๋””์ฝ”๋“œ ํ•จ์ˆ˜์˜ ์ถœ๋ ฅ์ด T ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ์ •์˜์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฌด์—‡์„ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰