package Ġreflect . construct Ċ Ċ // class ĠFoo Ċ // Ċ // fun Ġfunction ( factory : Ġ() Ġ-> ĠFoo ) Ġ{ Ġ// factory : ä¸Ģä¸ª æĹł åıĤ å¹¶ è¿ĶåĽŀ ĠFoo Ġ ç±»åŀĭçļĦ åĩ½æķ° åıĤæķ° Ċ // ĠĠĠ Ġval Ġx : ĠFoo Ġ= Ġfactory () Ċ // ĠĠĠ Ġprintln ( x ) Ġ// ĠFoo @ 4 6 1 7 c 2 6 4 Ċ //} Ċ // Ċ // fun Ġmain () Ġ{ Ċ // ĠĠĠ Ġfunction (:: Foo ) Ċ //} Ċ Ċ data Ġclass ĠPerson ( val Ġname : ĠString , Ġval Ġage : ĠInt ) Ċ Ċ // æī©å±ķ åĩ½æķ° Ċ fun ĠPerson . is Ad ult () Ġ= Ġage Ġ>= Ġ 1 8 Ċ Ċ // æŀĦéĢł æĸ¹æ³ķ å¼ķçĶ¨ åŃĺåĤ¨ Ċ val Ġcreate Person Ġ= Ġ:: Person Ċ /** Ċ Ġ* Ġ å°½ ç®¡ is Ad ult ä¸įæĺ¯ Person ç±»çļĦ æĪĲåĳĺ ï¼Į è¿ĺæĺ¯ åı¯ä»¥éĢļè¿ĩ å¼ķçĶ¨ è®¿éĹ® å®ĥ ï¼Į è¿Ļ åĴĮ è®¿éĹ® å®ŀä¾ĭ çļĦ æĪĲåĳĺ æĺ¯ ä¸Ģæł· çļĦ Ċ Ġ*/ Ċ val Ġpredicate Ġ= ĠPerson :: is Ad ult Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġ// æŀĦéĢł æĸ¹æ³ķ å¼ķçĶ¨ Ġ å»¶ è¿ Ł æī§è¡Į åĪĽå»º ç±» å®ŀä¾ĭ åĬ¨ ä½ľ ĊĠĠĠ Ġval Ġp Ġ= Ġcreate Person (" Tom Cat ", Ġ 2 2 ) ĊĠĠĠ Ġprintln ( p ) Ġ// Person ( name = Tom Cat , Ġage = 2 2 ) ĊĠĠĠ Ġprintln ( predicate ( p )) Ġ// true ĊĊĠĠĠ Ġ// ç»ĳå®ļ æĪĲåĳĺ å¼ķçĶ¨ ĊĠĠĠ Ġval Ġd mit ry s Age Function Ġ= Ġp :: age Ġ Ġ// K Property 0 < Int > ĊĠĠĠ Ġprintln ( d mit ry s Age Function . get ()) // 2 2 Ġget ä¸įéľĢè¦ģ ä¼łåħ¥ æİ¥æĶ¶ èĢħ å¯¹è±¡ ĊĠĠĠ Ġprintln ( d mit ry s Age Function ()) // 2 2 ĊĊĠĠĠ Ġval Ġd mit ry s Age Property Ġ= ĠPerson :: age Ġ// K Property 1 < Person , ĠInt > ĊĠĠĠ Ġprintln ( d mit ry s Age Property . get ( p )) Ġ// 2 2 Ċ }