Io에서 익명 객체 리터럴 만들기
Io에서는 몇 가지 구문 확장을 지원하는데, 그것을 이용하면 JavaScript의 익명 객체 리터럴을 흉내낼 수 있다. 익명 객체 리터럴이란, 간단하게 생각해서 Object clone do(msg)를 { msg }와 같이 표현할 수 있으면 되는 것이다.
Object curlyBrackets := method(
o := Object clone
call message arguments foreach(arg,
o doMessage(arg)
)
return o
)
doMessage 메소드는 인자로 받은 Message 객체를 리시버의 컨텍스트에서 평가한다. {} 연산자는 curlyBrackets로 포워드되는데, 인자로 받은 메세지를 그대로 새로 복제된 객체에서 평가하면 원하는 것을 이룰 수 있다.
아래와 같이 사용하면 된다.
Io> Object clone do(a := 1; b := 2)
==> Object_0x317e6b0:
b = 2
a = 1
Io> { a := 1; b := 2 }
==> Object_0x3182040:
b = 2
a = 1
Io> Object { a := 1; b := 2 }
==> Object_0x3185c50:
b = 2
a = 1
Io> curlyBrackets(a := 1; b := 2)
==> Object_0x3189920:
b = 2
a = 1
Io> Object curlyBrackets(a := 1; b := 2)
==> Object_0x318d5c0:
b = 2
a = 1
