package Ġorg . ath en ian Ċ Ċ // ĠSee : Ġhttps :// pro android dev . com / writing - dsl s - in - kotlin - part - 1 - 7 f 5 d 2 1 9 3 f 2 7 7 Ċ Ċ fun Ġmain () Ġ{ ĊĊĠ Ġdata Ġclass ĠAddress ( var Ġstreet : ĠString ? Ġ= Ġnull , Ġvar Ġcity : ĠString ? Ġ= Ġnull ) ĊĊĠ Ġdata Ġclass ĠPerson ( var Ġname : ĠString ? Ġ= Ġnull , Ġvar Ġage : ĠInt ? Ġ= Ġnull , Ġvar Ġaddress : ĠAddress ? Ġ= Ġnull ) ĊĊĠ Ġfun Ġlambda Arg (): ĠPerson Ġ{ ĊĊĠĠĠ Ġ// ĠLambda Ġarg ĊĠĠĠ Ġfun Ġperson ( block : Ġ( Person ) Ġ-> ĠUnit ): ĠPerson Ġ{ ĊĠĠĠĠĠ Ġval Ġp Ġ= ĠPerson () ĊĠĠĠĠĠ Ġblock ( p ) ĊĠĠĠĠĠ Ġ// block . invoke ( p ) ĊĠĠĠĠĠ Ġreturn Ġp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġperson Ġ{ Ġp : ĠPerson Ġ-> ĊĠĠĠĠĠ Ġp . name Ġ= Ġ" John " ĊĠĠĠĠĠ Ġp . age Ġ= Ġ 2 5 ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġlambda With Receiver Arg (): ĠPerson Ġ{ ĊĊĠĠĠ Ġ// ĠLambda Ġwith Ġreceiver Ġarg ĊĠĠĠ Ġfun Ġperson ( block : ĠPerson . () Ġ-> ĠUnit ): ĠPerson Ġ{ ĊĠĠĠĠĠ Ġval Ġp Ġ= ĠPerson () ĊĠĠĠĠĠ Ġp . block () ĊĠĠĠĠĠ Ġ// p . apply ( block ) ĊĠĠĠĠĠ Ġreturn Ġp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġperson Ġ{ ĊĠĠĠĠĠ Ġthis . name Ġ= Ġ" M ary " ĊĠĠĠĠĠ Ġthis . age Ġ= Ġ 2 6 ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġembedded Lambda With Receiver Arg (): ĠPerson Ġ{ ĊĊĠĠĠ Ġfun Ġperson ( block : ĠPerson . () Ġ-> ĠUnit ): ĠPerson Ġ= ĠPerson (). apply ( block ) ĊĊĠĠĠ Ġfun ĠPerson . address ( block : ĠAddress . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠ Ġaddress Ġ= ĠAddress (). apply ( block ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġperson Ġ{ ĊĠĠĠĠĠ Ġname Ġ= Ġ" Trace y " ĊĠĠĠĠĠ Ġage Ġ= Ġ 2 1 ĊĠĠĠĠĠ Ġaddress Ġ{ ĊĠĠĠĠĠĠĠ Ġstreet Ġ= Ġ" 1 2 3 ĠMain " ĊĠĠĠĠĠĠĠ Ġcity Ġ= Ġ" H ou ston " ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprintln (" Lambda ĠArg : Ġ${ lambda Arg () }") ĊĠ Ġprintln (" Lambda ĠWith ĠReceiver ĠArg : Ġ${ lambda With Receiver Arg () }") ĊĠ Ġprintln (" Embedded ĠLambda ĠWith ĠReceiver ĠArg : Ġ${ embedded Lambda With Receiver Arg () }") Ċ } ĊĊĊ