рдпрд╣ рд▓реЗрдЦ рдХреЛрдб рдХреНрд▓реАрдирд░ рдмрдирд╛рдиреЗ рдФрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ, рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
class Awesome doFoo : (arg, cb) -> unless arg is 42 return cb Error """ only The Answer may be an argument, but got: |arg| = |#{arg}| """ cb null, "#{arg} is The Answer" doBar : (arg, cb) -> # hm... arg must be The Answer too
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ (рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдПрдХ) рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдирдИ рд╡рд┐рдзрд┐ рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдореБрдЦреНрдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдзреНрдпрд╛рди рднрдВрдЧ рд╣реЛрддрд╛ рд╣реИред
рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдереЛрдбрд╝рд╛ рдзреЛрдЦрд╛ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд-рдХреНрд▓рд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢реБрд░реВ рдХрд░рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛрдб рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
ensureArgIsTheAnswer = (methodBody) -> (arg, cb) -> unless arg is 42 return cb Error """ only The Answer may be an argument, but got: |arg| = |#{arg}| """ methodBody.call @, arg, cb class Awesome doFoo : ( ensureArgIsTheAnswer (arg, cb) -> cb null, "#{arg} is The Answer" ) doBar : ( ensureArgIsTheAnswer (arg, cb) -> cb null, "#{arg*2} is The Double Answer" )
рдЙрд╕реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреАрдмрдЧрд┐рдВрдЧ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
logOnDemand = (methodBody) -> (args...)-> __rval__ = methodBody.apply this, args if @_do_logging_ console.log "#{args[0]} -> #{__rval__}" __rval__
рдФрд░ рд╡рд╣ рд╕рдм рдЬреЛ рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдорд░рд╣рдо рдореЗрдВ рдПрдХ рдордХреНрдЦреА (рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рднреА) - рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдХреЛ рдЦреБрдж рдХреЛ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдореБрдЭреЗ рдЕрднреА рддрдХ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИредрд╢рд╣рдж рдХрд╛ рдмреИрд░рд▓ (рдЗрдирдлрд░реНрдирд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж) - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ (рдПрд╕) рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдЖрдпрд╛рдд рдХрд░реЗрдВ, рдЬреЛ рдХрд┐ рд▓реЗрдЦрди рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ рдФрд░ рдкрдардиреАрдпрддрд╛ рдмрдврд╝рд╛рдПрдЧрд╛ред
рдпрд╣ рдЯреНрд░рд┐рдХ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ
CoffeeScript Ristretto рдкреБрд╕реНрддрдХ рдХреЗ рд╕рд╛рде рдЦрд░реАрджреА рдЧрдИ рдереА, рдореЗрд░реЗ рд▓рд┐рдП - рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рдордЭрджрд╛рд░ CoffeeScriptред
рдкреБрдирд╢реНрдЪред рдпрд╣ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдЪреНрдЪрд╛ рддрд░реАрдХрд╛ рд╣реИ, рдмрд┐рдирд╛ callee
рдФрд░ рдЕрдиреНрдп рд╢реИрддрд╛рди рдХреЗ, рдпрд╣ рдХрд░реНрдо рдХреЛ рдЦрд░рд╛рдм рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИредрдкреА рдкреА рдПрд╕ред рд╡рд░реНрдЧ рдореЗрдВ рд╕рдЬрд╛рдП рдЧрдП рд╡рд┐рдзрд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрд╖реНрдардХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ TM2 рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реВрдВред