aboutsummaryrefslogtreecommitdiff
path: root/doc/docs/doc/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/docs/doc/README.md')
-rwxr-xr-xdoc/docs/doc/README.md164
1 files changed, 85 insertions, 79 deletions
diff --git a/doc/docs/doc/README.md b/doc/docs/doc/README.md
index 814593b..e268dc8 100755
--- a/doc/docs/doc/README.md
+++ b/doc/docs/doc/README.md
@@ -31,16 +31,19 @@ inventory =
31 31
32-- pipe operator 32-- pipe operator
33[1, 2, 3] 33[1, 2, 3]
34 |> map (x)-> x * 2 34 |> map (x) -> x * 2
35 |> filter (x)-> x > 4 35 |> filter (x) -> x > 4
36 |> reduce 0, (a, b)-> a + b 36 |> reduce 0, (a, b) -> a + b
37 |> print 37 |> print
38 38
39-- metatable manipulation 39-- metatable manipulation
40apple = 40apple =
41 size: 15 41 size: 15
42 <index>: {color: 0x00ffff} 42 <index>:
43p apple.color, apple.<index> if apple.<>? 43 color: 0x00ffff
44
45with apple
46 p .size, .color, .<index> if .<>?
44 47
45-- js-like export syntax 48-- js-like export syntax
46export πŸŒ› = "ζœˆδΉ‹θ„šζœ¬" 49export πŸŒ› = "ζœˆδΉ‹θ„šζœ¬"
@@ -63,16 +66,19 @@ inventory =
63 66
64-- pipe operator 67-- pipe operator
65[1, 2, 3] 68[1, 2, 3]
66 |> map (x)-> x * 2 69 |> map (x) -> x * 2
67 |> filter (x)-> x > 4 70 |> filter (x) -> x > 4
68 |> reduce 0, (a, b)-> a + b 71 |> reduce 0, (a, b) -> a + b
69 |> print 72 |> print
70 73
71-- metatable manipulation 74-- metatable manipulation
72apple = 75apple =
73 size: 15 76 size: 15
74 &lt;index&gt;: {color: 0x00ffff} 77 &lt;index&gt;:
75p apple.color, apple.&lt;index&gt; if apple.&lt;&gt;? 78 color: 0x00ffff
79
80with apple
81 p .size, .color, .&lt;index&gt; if .&lt;&gt;?
76 82
77-- js-like export syntax 83-- js-like export syntax
78export πŸŒ› = "ζœˆδΉ‹θ„šζœ¬" 84export πŸŒ› = "ζœˆδΉ‹θ„šζœ¬"
@@ -210,14 +216,14 @@ area = $PI2 * 5
210macro HELLO = -> "'hello world'" 216macro HELLO = -> "'hello world'"
211print $HELLO 217print $HELLO
212 218
213macro config = (debugging)-> 219macro config = (debugging) ->
214 global debugMode = debugging == "true" 220 global debugMode = debugging == "true"
215 "" 221 ""
216 222
217macro asserts = (cond)-> 223macro asserts = (cond) ->
218 debugMode and "assert #{cond}" or "" 224 debugMode and "assert #{cond}" or ""
219 225
220macro assert = (cond)-> 226macro assert = (cond) ->
221 debugMode and "assert #{cond}" or "#{cond}" 227 debugMode and "assert #{cond}" or "#{cond}"
222 228
223$config true 229$config true
@@ -227,7 +233,7 @@ $config false
227value = $assert item 233value = $assert item
228 234
229-- the passed expressions are treated as strings 235-- the passed expressions are treated as strings
230macro and = (...)-> "#{ table.concat {...}, ' and ' }" 236macro and = (...) -> "#{ table.concat {...}, ' and ' }"
231if $and f1!, f2!, f3! 237if $and f1!, f2!, f3!
232 print "OK" 238 print "OK"
233``` 239```
@@ -239,14 +245,14 @@ area = $PI2 * 5
239macro HELLO = -> "'hello world'" 245macro HELLO = -> "'hello world'"
240print $HELLO 246print $HELLO
241 247
242macro config = (debugging)-> 248macro config = (debugging) ->
243 global debugMode = debugging == "true" 249 global debugMode = debugging == "true"
244 "" 250 ""
245 251
246macro asserts = (cond)-> 252macro asserts = (cond) ->
247 debugMode and "assert #{cond}" or "" 253 debugMode and "assert #{cond}" or ""
248 254
249macro assert = (cond)-> 255macro assert = (cond) ->
250 debugMode and "assert #{cond}" or "#{cond}" 256 debugMode and "assert #{cond}" or "#{cond}"
251 257
252$config true 258$config true
@@ -256,7 +262,7 @@ $config false
256value = $assert item 262value = $assert item
257 263
258-- the passed expressions are treated as strings 264-- the passed expressions are treated as strings
259macro and = (...)-> "#{ table.concat {...}, ' and ' }" 265macro and = (...) -> "#{ table.concat {...}, ' and ' }"
260if $and f1!, f2!, f3! 266if $and f1!, f2!, f3!
261 print "OK" 267 print "OK"
262</pre> 268</pre>
@@ -266,21 +272,21 @@ if $and f1!, f2!, f3!
266 272
267A macro function can either return a YueScript string or a config table containing Lua codes. 273A macro function can either return a YueScript string or a config table containing Lua codes.
268```moonscript 274```moonscript
269macro yueFunc = (var)-> "local #{var} = ->" 275macro yueFunc = (var) -> "local #{var} = ->"
270$yueFunc funcA 276$yueFunc funcA
271funcA = -> "assign the Yue defined variable" 277funcA = -> "fail to assign to the Yue defined variable"
272 278
273-- take care and let YueScript know the 279-- take care and let YueScript know the
274-- local variables you declared in Lua code 280-- local variables you declared in Lua code
275macro luaFunc = (var)-> { 281macro luaFunc = (var) -> {
276 code: "local function #{var}() end" 282 code: "local function #{var}() end"
277 type: "lua" 283 type: "lua"
278 locals: {var} 284 locals: {var}
279} 285}
280$luaFunc funcB 286$luaFunc funcB
281funcB = -> "assign the Lua defined variable" 287funcB = -> "assign to the Lua defined variable"
282 288
283macro lua = (code)-> { 289macro lua = (code) -> {
284 :code 290 :code
285 type: "lua" 291 type: "lua"
286} 292}
@@ -295,21 +301,21 @@ end
295``` 301```
296<YueDisplay> 302<YueDisplay>
297<pre> 303<pre>
298macro yueFunc = (var)-> "local #{var} = ->" 304macro yueFunc = (var) -> "local #{var} = ->"
299$yueFunc funcA 305$yueFunc funcA
300funcA = -> "assign the Yue defined variable" 306funcA = -> "fail to assign to the Yue defined variable"
301 307
302-- take care and let YueScript know the 308-- take care and let YueScript know the
303-- local variables you declared in Lua codes 309-- local variables you declared in Lua codes
304macro luaFunc = (var)-> { 310macro luaFunc = (var) -> {
305 code: "local function #{var}() end" 311 code: "local function #{var}() end"
306 type: "lua" 312 type: "lua"
307 locals: {var} 313 locals: {var}
308} 314}
309$luaFunc funcB 315$luaFunc funcB
310funcB = -> "assign the Lua defined variable" 316funcB = -> "assign to the Lua defined variable"
311 317
312macro lua = (code)-> { 318macro lua = (code) -> {
313 :code 319 :code
314 type: "lua" 320 type: "lua"
315} 321}
@@ -329,9 +335,9 @@ end
329Macro functions can be exported from a module and get imported in another module. You have to put export macro functions in a single file to be used, and only macro definition, macro importing and macro expansion in place can be put into the macro exporting module. 335Macro functions can be exported from a module and get imported in another module. You have to put export macro functions in a single file to be used, and only macro definition, macro importing and macro expansion in place can be put into the macro exporting module.
330```moonscript 336```moonscript
331-- file: utils.yue 337-- file: utils.yue
332export macro map = (items, action)-> "[#{action} for _ in *#{items}]" 338export macro map = (items, action) -> "[#{action} for _ in *#{items}]"
333export macro filter = (items, action)-> "[_ for _ in *#{items} when #{action}]" 339export macro filter = (items, action) -> "[_ for _ in *#{items} when #{action}]"
334export macro foreach = (items, action)-> "for _ in *#{items} 340export macro foreach = (items, action) -> "for _ in *#{items}
335 #{action}" 341 #{action}"
336 342
337-- file main.yue 343-- file main.yue
@@ -344,9 +350,9 @@ import "utils" as {
344<YueDisplay> 350<YueDisplay>
345<pre> 351<pre>
346-- file: utils.yue 352-- file: utils.yue
347export macro map = (items, action)-> "[#{action} for _ in *#{items}]" 353export macro map = (items, action) -> "[#{action} for _ in *#{items}]"
348export macro filter = (items, action)-> "[_ for _ in *#{items} when #{action}]" 354export macro filter = (items, action) -> "[_ for _ in *#{items} when #{action}]"
349export macro foreach = (items, action)-> "for _ in *#{items} 355export macro foreach = (items, action) -> "for _ in *#{items}
350 #{action}" 356 #{action}"
351-- file main.yue 357-- file main.yue
352-- import function is not available in browser, try it in a real environment 358-- import function is not available in browser, try it in a real environment
@@ -457,7 +463,7 @@ print 1 <= a <= 10
457Note the evaluation behavior of chained comparisons: 463Note the evaluation behavior of chained comparisons:
458 464
459```moonscript 465```moonscript
460v = (x)-> 466v = (x) ->
461 print x 467 print x
462 x 468 x
463 469
@@ -480,7 +486,7 @@ print v(1) > v(2) <= v(3)
480``` 486```
481<YueDisplay> 487<YueDisplay>
482<pre> 488<pre>
483v = (x)-> 489v = (x) ->
484 print x 490 print x
485 x 491 x
486 492
@@ -567,7 +573,7 @@ Create normal table with empty bracekets **<>** or metamethod key which is surro
567 573
568```moonscript 574```moonscript
569mt = {} 575mt = {}
570add = (right)=> <>: mt, value: @value + right.value 576add = (right) => <>: mt, value: @value + right.value
571mt.__add = add 577mt.__add = add
572 578
573a = <>: mt, value: 1 579a = <>: mt, value: 1
@@ -583,7 +589,7 @@ close _ = <close>: -> print "out of scope"
583<YueDisplay> 589<YueDisplay>
584<pre> 590<pre>
585mt = {} 591mt = {}
586add = (right)=> &lt;&gt;: mt, value: @value + right.value 592add = (right) => &lt;&gt;: mt, value: @value + right.value
587mt.__add = add 593mt.__add = add
588 594
589a = &lt;&gt;: mt, value: 1 595a = &lt;&gt;: mt, value: 1
@@ -645,7 +651,7 @@ func?!
645print abc?["hello world"]?.xyz 651print abc?["hello world"]?.xyz
646 652
647x = tab?.value 653x = tab?.value
648len = utf8?.len or string?.len or (o)-> #o 654len = utf8?.len or string?.len or (o) -> #o
649 655
650if print and x? 656if print and x?
651 print x 657 print x
@@ -660,7 +666,7 @@ func?!
660print abc?["hello world"]?.xyz 666print abc?["hello world"]?.xyz
661 667
662x = tab?.value 668x = tab?.value
663len = utf8?.len or string?.len or (o)-> #o 669len = utf8?.len or string?.len or (o) -> #o
664 670
665if print and x? 671if print and x?
666 print x 672 print x
@@ -1361,18 +1367,18 @@ You can write multi-line chaining function calls with a same indent.
1361```moonscript 1367```moonscript
1362Rx.Observable 1368Rx.Observable
1363 .fromRange 1, 8 1369 .fromRange 1, 8
1364 \filter (x)-> x % 2 == 0 1370 \filter (x) -> x % 2 == 0
1365 \concat Rx.Observable.of 'who do we appreciate' 1371 \concat Rx.Observable.of 'who do we appreciate'
1366 \map (value)-> value .. '!' 1372 \map (value) -> value .. '!'
1367 \subscribe print 1373 \subscribe print
1368``` 1374```
1369<YueDisplay> 1375<YueDisplay>
1370<pre> 1376<pre>
1371Rx.Observable 1377Rx.Observable
1372 .fromRange 1, 8 1378 .fromRange 1, 8
1373 \filter (x)-> x % 2 == 0 1379 \filter (x) -> x % 2 == 0
1374 \concat Rx.Observable.of 'who do we appreciate' 1380 \concat Rx.Observable.of 'who do we appreciate'
1375 \map (value)-> value .. '!' 1381 \map (value) -> value .. '!'
1376 \subscribe print 1382 \subscribe print
1377</pre> 1383</pre>
1378</YueDisplay> 1384</YueDisplay>
@@ -1586,11 +1592,11 @@ func_b()
1586Functions with arguments can be created by preceding the arrow with a list of argument names in parentheses: 1592Functions with arguments can be created by preceding the arrow with a list of argument names in parentheses:
1587 1593
1588```moonscript 1594```moonscript
1589sum = (x, y)-> print "sum", x + y 1595sum = (x, y) -> print "sum", x + y
1590``` 1596```
1591<YueDisplay> 1597<YueDisplay>
1592<pre> 1598<pre>
1593sum = (x, y)-> print "sum", x + y 1599sum = (x, y) -> print "sum", x + y
1594</pre> 1600</pre>
1595</YueDisplay> 1601</YueDisplay>
1596 1602
@@ -1627,7 +1633,7 @@ There must not be any space between the opening parenthesis and the function.
1627Functions will coerce the last statement in their body into a return statement, this is called implicit return: 1633Functions will coerce the last statement in their body into a return statement, this is called implicit return:
1628 1634
1629```moonscript 1635```moonscript
1630sum = (x, y)-> x + y 1636sum = (x, y) -> x + y
1631print "The sum is ", sum 10, 20 1637print "The sum is ", sum 10, 20
1632``` 1638```
1633<YueDisplay> 1639<YueDisplay>
@@ -1640,23 +1646,23 @@ print "The sum is ", sum 10, 20
1640And if you need to explicitly return, you can use the return keyword: 1646And if you need to explicitly return, you can use the return keyword:
1641 1647
1642```moonscript 1648```moonscript
1643sum = (x, y)-> return x + y 1649sum = (x, y) -> return x + y
1644``` 1650```
1645<YueDisplay> 1651<YueDisplay>
1646<pre> 1652<pre>
1647sum = (x, y)-> return x + y 1653sum = (x, y) -> return x + y
1648</pre> 1654</pre>
1649</YueDisplay> 1655</YueDisplay>
1650 1656
1651Just like in Lua, functions can return multiple values. The last statement must be a list of values separated by commas: 1657Just like in Lua, functions can return multiple values. The last statement must be a list of values separated by commas:
1652 1658
1653```moonscript 1659```moonscript
1654mystery = (x, y)-> x + y, x - y 1660mystery = (x, y) -> x + y, x - y
1655a, b = mystery 10, 20 1661a, b = mystery 10, 20
1656``` 1662```
1657<YueDisplay> 1663<YueDisplay>
1658<pre> 1664<pre>
1659mystery = (x, y)-> x + y, x - y 1665mystery = (x, y) -> x + y, x - y
1660a, b = mystery 10, 20 1666a, b = mystery 10, 20
1661</pre> 1667</pre>
1662</YueDisplay> 1668</YueDisplay>
@@ -1666,11 +1672,11 @@ a, b = mystery 10, 20
1666Because it is an idiom in Lua to send an object as the first argument when calling a method, a special syntax is provided for creating functions which automatically includes a self argument. 1672Because it is an idiom in Lua to send an object as the first argument when calling a method, a special syntax is provided for creating functions which automatically includes a self argument.
1667 1673
1668```moonscript 1674```moonscript
1669func = (num)=> @value + num 1675func = (num) => @value + num
1670``` 1676```
1671<YueDisplay> 1677<YueDisplay>
1672<pre> 1678<pre>
1673func = (num)=> @value + num 1679func = (num) => @value + num
1674</pre> 1680</pre>
1675</YueDisplay> 1681</YueDisplay>
1676 1682
@@ -1679,13 +1685,13 @@ func = (num)=> @value + num
1679It is possible to provide default values for the arguments of a function. An argument is determined to be empty if its value is nil. Any nil arguments that have a default value will be replace before the body of the function is run. 1685It is possible to provide default values for the arguments of a function. An argument is determined to be empty if its value is nil. Any nil arguments that have a default value will be replace before the body of the function is run.
1680 1686
1681```moonscript 1687```moonscript
1682my_function = (name = "something", height = 100)-> 1688my_function = (name = "something", height = 100) ->
1683 print "Hello I am", name 1689 print "Hello I am", name
1684 print "My height is", height 1690 print "My height is", height
1685``` 1691```
1686<YueDisplay> 1692<YueDisplay>
1687<pre> 1693<pre>
1688my_function = (name = "something", height = 100)-> 1694my_function = (name = "something", height = 100) ->
1689 print "Hello I am", name 1695 print "Hello I am", name
1690 print "My height is", height 1696 print "My height is", height
1691</pre> 1697</pre>
@@ -1694,12 +1700,12 @@ my_function = (name = "something", height = 100)->
1694An argument default value expression is evaluated in the body of the function in the order of the argument declarations. For this reason default values have access to previously declared arguments. 1700An argument default value expression is evaluated in the body of the function in the order of the argument declarations. For this reason default values have access to previously declared arguments.
1695 1701
1696```moonscript 1702```moonscript
1697some_args = (x = 100, y = x + 1000)-> 1703some_args = (x = 100, y = x + 1000) ->
1698 print x + y 1704 print x + y
1699``` 1705```
1700<YueDisplay> 1706<YueDisplay>
1701<pre> 1707<pre>
1702some_args = (x = 100, y = x + 1000)-> 1708some_args = (x = 100, y = x + 1000) ->
1703 print x + y 1709 print x + y
1704</pre> 1710</pre>
1705</YueDisplay> 1711</YueDisplay>
@@ -2787,7 +2793,7 @@ class Inventory
2787 new: => 2793 new: =>
2788 @items = {} 2794 @items = {}
2789 2795
2790 add_item: (name)=> 2796 add_item: (name) =>
2791 if @items[name] 2797 if @items[name]
2792 @items[name] += 1 2798 @items[name] += 1
2793 else 2799 else
@@ -2799,7 +2805,7 @@ class Inventory
2799 new: => 2805 new: =>
2800 @items = {} 2806 @items = {}
2801 2807
2802 add_item: (name)=> 2808 add_item: (name) =>
2803 if @items[name] 2809 if @items[name]
2804 @items[name] += 1 2810 @items[name] += 1
2805 else 2811 else
@@ -2839,7 +2845,7 @@ Consider the example below, the clothes property is shared amongst all instances
2839```moonscript 2845```moonscript
2840class Person 2846class Person
2841 clothes: [] 2847 clothes: []
2842 give_item: (name)=> 2848 give_item: (name) =>
2843 table.insert @clothes, name 2849 table.insert @clothes, name
2844 2850
2845a = Person! 2851a = Person!
@@ -2855,7 +2861,7 @@ print item for item in *a.clothes
2855<pre> 2861<pre>
2856class Person 2862class Person
2857 clothes: [] 2863 clothes: []
2858 give_item: (name)=> 2864 give_item: (name) =>
2859 table.insert @clothes, name 2865 table.insert @clothes, name
2860 2866
2861a = Person! 2867a = Person!
@@ -2891,7 +2897,7 @@ The extends keyword can be used in a class declaration to inherit the properties
2891```moonscript 2897```moonscript
2892class BackPack extends Inventory 2898class BackPack extends Inventory
2893 size: 10 2899 size: 10
2894 add_item: (name)=> 2900 add_item: (name) =>
2895 if #@items > size then error "backpack is full" 2901 if #@items > size then error "backpack is full"
2896 super name 2902 super name
2897``` 2903```
@@ -2899,7 +2905,7 @@ class BackPack extends Inventory
2899<pre> 2905<pre>
2900class BackPack extends Inventory 2906class BackPack extends Inventory
2901 size: 10 2907 size: 10
2902 add_item: (name)=> 2908 add_item: (name) =>
2903 if #@items > size then error "backpack is full" 2909 if #@items > size then error "backpack is full"
2904 super name 2910 super name
2905</pre> 2911</pre>
@@ -2913,7 +2919,7 @@ Whenever a class inherits from another, it sends a message to the parent class b
2913 2919
2914```moonscript 2920```moonscript
2915class Shelf 2921class Shelf
2916 @__inherited: (child)=> 2922 @__inherited: (child) =>
2917 print @__name, "was inherited by", child.__name 2923 print @__name, "was inherited by", child.__name
2918 2924
2919-- will print: Shelf was inherited by Cupboard 2925-- will print: Shelf was inherited by Cupboard
@@ -2922,7 +2928,7 @@ class Cupboard extends Shelf
2922<YueDisplay> 2928<YueDisplay>
2923<pre> 2929<pre>
2924class Shelf 2930class Shelf
2925 @__inherited: (child)=> 2931 @__inherited: (child) =>
2926 print @__name, "was inherited by", child.__name 2932 print @__name, "was inherited by", child.__name
2927 2933
2928-- will print: Shelf was inherited by Cupboard 2934-- will print: Shelf was inherited by Cupboard
@@ -3108,7 +3114,7 @@ All variables declared in the body of the class are local to the classes propert
3108```moonscript 3114```moonscript
3109class MoreThings 3115class MoreThings
3110 secret = 123 3116 secret = 123
3111 log = (msg)-> print "LOG:", msg 3117 log = (msg) -> print "LOG:", msg
3112 3118
3113 some_method: => 3119 some_method: =>
3114 log "hello world: " .. secret 3120 log "hello world: " .. secret
@@ -3117,7 +3123,7 @@ class MoreThings
3117<pre> 3123<pre>
3118class MoreThings 3124class MoreThings
3119 secret = 123 3125 secret = 123
3120 log = (msg)-> print "LOG:", msg 3126 log = (msg) -> print "LOG:", msg
3121 3127
3122 some_method: => 3128 some_method: =>
3123 log "hello world: " .. secret 3129 log "hello world: " .. secret
@@ -3144,11 +3150,11 @@ assert @@ == self.__class
3144For example, a quick way to create a new instance of the same class from an instance method using @@: 3150For example, a quick way to create a new instance of the same class from an instance method using @@:
3145 3151
3146```moonscript 3152```moonscript
3147some_instance_method = (...)=> @@ ... 3153some_instance_method = (...) => @@ ...
3148``` 3154```
3149<YueDisplay> 3155<YueDisplay>
3150<pre> 3156<pre>
3151some_instance_method = (...)=> @@ ... 3157some_instance_method = (...) => @@ ...
3152</pre> 3158</pre>
3153</YueDisplay> 3159</YueDisplay>
3154 3160
@@ -3188,13 +3194,13 @@ class Something
3188You can also use this syntax for a common function to initialize a object's fields. 3194You can also use this syntax for a common function to initialize a object's fields.
3189 3195
3190```moonscript 3196```moonscript
3191new = (@fieldA, @fieldB)=> @ 3197new = (@fieldA, @fieldB) => @
3192obj = new {}, 123, "abc" 3198obj = new {}, 123, "abc"
3193print obj 3199print obj
3194``` 3200```
3195<YueDisplay> 3201<YueDisplay>
3196<pre> 3202<pre>
3197new = (@fieldA, @fieldB)=> @ 3203new = (@fieldA, @fieldB) => @
3198obj = new {}, 123, "abc" 3204obj = new {}, 123, "abc"
3199print obj 3205print obj
3200</pre> 3206</pre>
@@ -3331,7 +3337,7 @@ file = with File "favorite_foods.txt"
3331Or… 3337Or…
3332 3338
3333```moonscript 3339```moonscript
3334create_person = (name, relatives)-> 3340create_person = (name, relatives) ->
3335 with Person! 3341 with Person!
3336 .name = name 3342 .name = name
3337 \add_relative relative for relative in *relatives 3343 \add_relative relative for relative in *relatives
@@ -3340,7 +3346,7 @@ me = create_person "Leaf", [dad, mother, sister]
3340``` 3346```
3341<YueDisplay> 3347<YueDisplay>
3342<pre> 3348<pre>
3343create_person = (name, relatives)-> 3349create_person = (name, relatives) ->
3344 with Person! 3350 with Person!
3345 .name = name 3351 .name = name
3346 \add_relative relative for relative in *relatives 3352 \add_relative relative for relative in *relatives
@@ -3465,7 +3471,7 @@ my_object = {
3465 write: => print "the value:", @value 3471 write: => print "the value:", @value
3466} 3472}
3467 3473
3468run_callback = (func)-> 3474run_callback = (func) ->
3469 print "running callback..." 3475 print "running callback..."
3470 func! 3476 func!
3471 3477
@@ -3484,7 +3490,7 @@ my_object = {
3484 write: => print "the value:", @value 3490 write: => print "the value:", @value
3485} 3491}
3486 3492
3487run_callback = (func)-> 3493run_callback = (func) ->
3488 print "running callback..." 3494 print "running callback..."
3489 func! 3495 func!
3490 3496
@@ -3544,7 +3550,7 @@ The using keyword lets us do that. using nil makes sure that no closed variables
3544```moonscript 3550```moonscript
3545i = 100 3551i = 100
3546 3552
3547my_func = (using nil)-> 3553my_func = (using nil) ->
3548 i = "hello" -- a new local variable is created here 3554 i = "hello" -- a new local variable is created here
3549 3555
3550my_func! 3556my_func!
@@ -3554,7 +3560,7 @@ print i -- prints 100, i is unaffected
3554<pre> 3560<pre>
3555i = 100 3561i = 100
3556 3562
3557my_func = (using nil)-> 3563my_func = (using nil) ->
3558 i = "hello" -- a new local variable is created here 3564 i = "hello" -- a new local variable is created here
3559 3565
3560my_func! 3566my_func!
@@ -3568,7 +3574,7 @@ Multiple names can be separated by commas. Closure values can still be accessed,
3568tmp = 1213 3574tmp = 1213
3569i, k = 100, 50 3575i, k = 100, 50
3570 3576
3571my_func = (add using k, i)-> 3577my_func = (add using k, i) ->
3572 tmp = tmp + add -- a new local tmp is created 3578 tmp = tmp + add -- a new local tmp is created
3573 i += tmp 3579 i += tmp
3574 k += tmp 3580 k += tmp
@@ -3581,7 +3587,7 @@ print i, k -- these have been updated
3581tmp = 1213 3587tmp = 1213
3582i, k = 100, 50 3588i, k = 100, 50
3583 3589
3584my_func = (add using k, i)-> 3590my_func = (add using k, i) ->
3585 tmp = tmp + add -- a new local tmp is created 3591 tmp = tmp + add -- a new local tmp is created
3586 i += tmp 3592 i += tmp
3587 k += tmp 3593 k += tmp