Code Metaphor

Programming, Writing, Reading, Thoughts…

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

This entry was posted on January 24, 2007 at 1:06 PM. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Comments are closed.

Powered by WordPress. Styled by Hong, MinHee. XML Feed, Comments XML Feed.