diff options
Diffstat (limited to 'doc/docs/doc/README.md')
-rwxr-xr-x | doc/docs/doc/README.md | 164 |
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 | 37 | ||
38 | 38 | ||
39 | -- metatable manipulation | 39 | -- metatable manipulation |
40 | apple = | 40 | apple = |
41 | size: 15 | 41 | size: 15 |
42 | <index>: {color: 0x00ffff} | 42 | <index>: |
43 | p apple.color, apple.<index> if apple.<>? | 43 | color: 0x00ffff |
44 | |||
45 | with apple | ||
46 | p .size, .color, .<index> if .<>? | ||
44 | 47 | ||
45 | -- js-like export syntax | 48 | -- js-like export syntax |
46 | export π = "ζδΉθζ¬" | 49 | export π = "ζδΉθζ¬" |
@@ -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 | 72 | ||
70 | 73 | ||
71 | -- metatable manipulation | 74 | -- metatable manipulation |
72 | apple = | 75 | apple = |
73 | size: 15 | 76 | size: 15 |
74 | <index>: {color: 0x00ffff} | 77 | <index>: |
75 | p apple.color, apple.<index> if apple.<>? | 78 | color: 0x00ffff |
79 | |||
80 | with apple | ||
81 | p .size, .color, .<index> if .<>? | ||
76 | 82 | ||
77 | -- js-like export syntax | 83 | -- js-like export syntax |
78 | export π = "ζδΉθζ¬" | 84 | export π = "ζδΉθζ¬" |
@@ -210,14 +216,14 @@ area = $PI2 * 5 | |||
210 | macro HELLO = -> "'hello world'" | 216 | macro HELLO = -> "'hello world'" |
211 | print $HELLO | 217 | print $HELLO |
212 | 218 | ||
213 | macro config = (debugging)-> | 219 | macro config = (debugging) -> |
214 | global debugMode = debugging == "true" | 220 | global debugMode = debugging == "true" |
215 | "" | 221 | "" |
216 | 222 | ||
217 | macro asserts = (cond)-> | 223 | macro asserts = (cond) -> |
218 | debugMode and "assert #{cond}" or "" | 224 | debugMode and "assert #{cond}" or "" |
219 | 225 | ||
220 | macro assert = (cond)-> | 226 | macro 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 | |||
227 | value = $assert item | 233 | value = $assert item |
228 | 234 | ||
229 | -- the passed expressions are treated as strings | 235 | -- the passed expressions are treated as strings |
230 | macro and = (...)-> "#{ table.concat {...}, ' and ' }" | 236 | macro and = (...) -> "#{ table.concat {...}, ' and ' }" |
231 | if $and f1!, f2!, f3! | 237 | if $and f1!, f2!, f3! |
232 | print "OK" | 238 | print "OK" |
233 | ``` | 239 | ``` |
@@ -239,14 +245,14 @@ area = $PI2 * 5 | |||
239 | macro HELLO = -> "'hello world'" | 245 | macro HELLO = -> "'hello world'" |
240 | print $HELLO | 246 | print $HELLO |
241 | 247 | ||
242 | macro config = (debugging)-> | 248 | macro config = (debugging) -> |
243 | global debugMode = debugging == "true" | 249 | global debugMode = debugging == "true" |
244 | "" | 250 | "" |
245 | 251 | ||
246 | macro asserts = (cond)-> | 252 | macro asserts = (cond) -> |
247 | debugMode and "assert #{cond}" or "" | 253 | debugMode and "assert #{cond}" or "" |
248 | 254 | ||
249 | macro assert = (cond)-> | 255 | macro 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 | |||
256 | value = $assert item | 262 | value = $assert item |
257 | 263 | ||
258 | -- the passed expressions are treated as strings | 264 | -- the passed expressions are treated as strings |
259 | macro and = (...)-> "#{ table.concat {...}, ' and ' }" | 265 | macro and = (...) -> "#{ table.concat {...}, ' and ' }" |
260 | if $and f1!, f2!, f3! | 266 | if $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 | ||
267 | A macro function can either return a YueScript string or a config table containing Lua codes. | 273 | A macro function can either return a YueScript string or a config table containing Lua codes. |
268 | ```moonscript | 274 | ```moonscript |
269 | macro yueFunc = (var)-> "local #{var} = ->" | 275 | macro yueFunc = (var) -> "local #{var} = ->" |
270 | $yueFunc funcA | 276 | $yueFunc funcA |
271 | funcA = -> "assign the Yue defined variable" | 277 | funcA = -> "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 |
275 | macro luaFunc = (var)-> { | 281 | macro 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 |
281 | funcB = -> "assign the Lua defined variable" | 287 | funcB = -> "assign to the Lua defined variable" |
282 | 288 | ||
283 | macro lua = (code)-> { | 289 | macro 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> |
298 | macro yueFunc = (var)-> "local #{var} = ->" | 304 | macro yueFunc = (var) -> "local #{var} = ->" |
299 | $yueFunc funcA | 305 | $yueFunc funcA |
300 | funcA = -> "assign the Yue defined variable" | 306 | funcA = -> "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 |
304 | macro luaFunc = (var)-> { | 310 | macro 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 |
310 | funcB = -> "assign the Lua defined variable" | 316 | funcB = -> "assign to the Lua defined variable" |
311 | 317 | ||
312 | macro lua = (code)-> { | 318 | macro lua = (code) -> { |
313 | :code | 319 | :code |
314 | type: "lua" | 320 | type: "lua" |
315 | } | 321 | } |
@@ -329,9 +335,9 @@ end | |||
329 | Macro 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. | 335 | Macro 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 |
332 | export macro map = (items, action)-> "[#{action} for _ in *#{items}]" | 338 | export macro map = (items, action) -> "[#{action} for _ in *#{items}]" |
333 | export macro filter = (items, action)-> "[_ for _ in *#{items} when #{action}]" | 339 | export macro filter = (items, action) -> "[_ for _ in *#{items} when #{action}]" |
334 | export macro foreach = (items, action)-> "for _ in *#{items} | 340 | export 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 |
347 | export macro map = (items, action)-> "[#{action} for _ in *#{items}]" | 353 | export macro map = (items, action) -> "[#{action} for _ in *#{items}]" |
348 | export macro filter = (items, action)-> "[_ for _ in *#{items} when #{action}]" | 354 | export macro filter = (items, action) -> "[_ for _ in *#{items} when #{action}]" |
349 | export macro foreach = (items, action)-> "for _ in *#{items} | 355 | export 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 | |||
457 | Note the evaluation behavior of chained comparisons: | 463 | Note the evaluation behavior of chained comparisons: |
458 | 464 | ||
459 | ```moonscript | 465 | ```moonscript |
460 | v = (x)-> | 466 | v = (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> |
483 | v = (x)-> | 489 | v = (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 |
569 | mt = {} | 575 | mt = {} |
570 | add = (right)=> <>: mt, value: @value + right.value | 576 | add = (right) => <>: mt, value: @value + right.value |
571 | mt.__add = add | 577 | mt.__add = add |
572 | 578 | ||
573 | a = <>: mt, value: 1 | 579 | a = <>: mt, value: 1 |
@@ -583,7 +589,7 @@ close _ = <close>: -> print "out of scope" | |||
583 | <YueDisplay> | 589 | <YueDisplay> |
584 | <pre> | 590 | <pre> |
585 | mt = {} | 591 | mt = {} |
586 | add = (right)=> <>: mt, value: @value + right.value | 592 | add = (right) => <>: mt, value: @value + right.value |
587 | mt.__add = add | 593 | mt.__add = add |
588 | 594 | ||
589 | a = <>: mt, value: 1 | 595 | a = <>: mt, value: 1 |
@@ -645,7 +651,7 @@ func?! | |||
645 | print abc?["hello world"]?.xyz | 651 | print abc?["hello world"]?.xyz |
646 | 652 | ||
647 | x = tab?.value | 653 | x = tab?.value |
648 | len = utf8?.len or string?.len or (o)-> #o | 654 | len = utf8?.len or string?.len or (o) -> #o |
649 | 655 | ||
650 | if print and x? | 656 | if print and x? |
651 | print x | 657 | print x |
@@ -660,7 +666,7 @@ func?! | |||
660 | print abc?["hello world"]?.xyz | 666 | print abc?["hello world"]?.xyz |
661 | 667 | ||
662 | x = tab?.value | 668 | x = tab?.value |
663 | len = utf8?.len or string?.len or (o)-> #o | 669 | len = utf8?.len or string?.len or (o) -> #o |
664 | 670 | ||
665 | if print and x? | 671 | if 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 |
1362 | Rx.Observable | 1368 | Rx.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> |
1371 | Rx.Observable | 1377 | Rx.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() | |||
1586 | Functions with arguments can be created by preceding the arrow with a list of argument names in parentheses: | 1592 | Functions with arguments can be created by preceding the arrow with a list of argument names in parentheses: |
1587 | 1593 | ||
1588 | ```moonscript | 1594 | ```moonscript |
1589 | sum = (x, y)-> print "sum", x + y | 1595 | sum = (x, y) -> print "sum", x + y |
1590 | ``` | 1596 | ``` |
1591 | <YueDisplay> | 1597 | <YueDisplay> |
1592 | <pre> | 1598 | <pre> |
1593 | sum = (x, y)-> print "sum", x + y | 1599 | sum = (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. | |||
1627 | Functions will coerce the last statement in their body into a return statement, this is called implicit return: | 1633 | Functions will coerce the last statement in their body into a return statement, this is called implicit return: |
1628 | 1634 | ||
1629 | ```moonscript | 1635 | ```moonscript |
1630 | sum = (x, y)-> x + y | 1636 | sum = (x, y) -> x + y |
1631 | print "The sum is ", sum 10, 20 | 1637 | print "The sum is ", sum 10, 20 |
1632 | ``` | 1638 | ``` |
1633 | <YueDisplay> | 1639 | <YueDisplay> |
@@ -1640,23 +1646,23 @@ print "The sum is ", sum 10, 20 | |||
1640 | And if you need to explicitly return, you can use the return keyword: | 1646 | And if you need to explicitly return, you can use the return keyword: |
1641 | 1647 | ||
1642 | ```moonscript | 1648 | ```moonscript |
1643 | sum = (x, y)-> return x + y | 1649 | sum = (x, y) -> return x + y |
1644 | ``` | 1650 | ``` |
1645 | <YueDisplay> | 1651 | <YueDisplay> |
1646 | <pre> | 1652 | <pre> |
1647 | sum = (x, y)-> return x + y | 1653 | sum = (x, y) -> return x + y |
1648 | </pre> | 1654 | </pre> |
1649 | </YueDisplay> | 1655 | </YueDisplay> |
1650 | 1656 | ||
1651 | Just like in Lua, functions can return multiple values. The last statement must be a list of values separated by commas: | 1657 | Just 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 |
1654 | mystery = (x, y)-> x + y, x - y | 1660 | mystery = (x, y) -> x + y, x - y |
1655 | a, b = mystery 10, 20 | 1661 | a, b = mystery 10, 20 |
1656 | ``` | 1662 | ``` |
1657 | <YueDisplay> | 1663 | <YueDisplay> |
1658 | <pre> | 1664 | <pre> |
1659 | mystery = (x, y)-> x + y, x - y | 1665 | mystery = (x, y) -> x + y, x - y |
1660 | a, b = mystery 10, 20 | 1666 | a, b = mystery 10, 20 |
1661 | </pre> | 1667 | </pre> |
1662 | </YueDisplay> | 1668 | </YueDisplay> |
@@ -1666,11 +1672,11 @@ a, b = mystery 10, 20 | |||
1666 | Because 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. | 1672 | Because 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 |
1669 | func = (num)=> @value + num | 1675 | func = (num) => @value + num |
1670 | ``` | 1676 | ``` |
1671 | <YueDisplay> | 1677 | <YueDisplay> |
1672 | <pre> | 1678 | <pre> |
1673 | func = (num)=> @value + num | 1679 | func = (num) => @value + num |
1674 | </pre> | 1680 | </pre> |
1675 | </YueDisplay> | 1681 | </YueDisplay> |
1676 | 1682 | ||
@@ -1679,13 +1685,13 @@ func = (num)=> @value + num | |||
1679 | It 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. | 1685 | It 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 |
1682 | my_function = (name = "something", height = 100)-> | 1688 | my_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> |
1688 | my_function = (name = "something", height = 100)-> | 1694 | my_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)-> | |||
1694 | An 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. | 1700 | An 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 |
1697 | some_args = (x = 100, y = x + 1000)-> | 1703 | some_args = (x = 100, y = x + 1000) -> |
1698 | print x + y | 1704 | print x + y |
1699 | ``` | 1705 | ``` |
1700 | <YueDisplay> | 1706 | <YueDisplay> |
1701 | <pre> | 1707 | <pre> |
1702 | some_args = (x = 100, y = x + 1000)-> | 1708 | some_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 |
2840 | class Person | 2846 | class 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 | ||
2845 | a = Person! | 2851 | a = Person! |
@@ -2855,7 +2861,7 @@ print item for item in *a.clothes | |||
2855 | <pre> | 2861 | <pre> |
2856 | class Person | 2862 | class 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 | ||
2861 | a = Person! | 2867 | a = Person! |
@@ -2891,7 +2897,7 @@ The extends keyword can be used in a class declaration to inherit the properties | |||
2891 | ```moonscript | 2897 | ```moonscript |
2892 | class BackPack extends Inventory | 2898 | class 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> |
2900 | class BackPack extends Inventory | 2906 | class 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 |
2915 | class Shelf | 2921 | class 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> |
2924 | class Shelf | 2930 | class 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 |
3109 | class MoreThings | 3115 | class 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> |
3118 | class MoreThings | 3124 | class 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 | |||
3144 | For example, a quick way to create a new instance of the same class from an instance method using @@: | 3150 | For example, a quick way to create a new instance of the same class from an instance method using @@: |
3145 | 3151 | ||
3146 | ```moonscript | 3152 | ```moonscript |
3147 | some_instance_method = (...)=> @@ ... | 3153 | some_instance_method = (...) => @@ ... |
3148 | ``` | 3154 | ``` |
3149 | <YueDisplay> | 3155 | <YueDisplay> |
3150 | <pre> | 3156 | <pre> |
3151 | some_instance_method = (...)=> @@ ... | 3157 | some_instance_method = (...) => @@ ... |
3152 | </pre> | 3158 | </pre> |
3153 | </YueDisplay> | 3159 | </YueDisplay> |
3154 | 3160 | ||
@@ -3188,13 +3194,13 @@ class Something | |||
3188 | You can also use this syntax for a common function to initialize a object's fields. | 3194 | You can also use this syntax for a common function to initialize a object's fields. |
3189 | 3195 | ||
3190 | ```moonscript | 3196 | ```moonscript |
3191 | new = (@fieldA, @fieldB)=> @ | 3197 | new = (@fieldA, @fieldB) => @ |
3192 | obj = new {}, 123, "abc" | 3198 | obj = new {}, 123, "abc" |
3193 | print obj | 3199 | print obj |
3194 | ``` | 3200 | ``` |
3195 | <YueDisplay> | 3201 | <YueDisplay> |
3196 | <pre> | 3202 | <pre> |
3197 | new = (@fieldA, @fieldB)=> @ | 3203 | new = (@fieldA, @fieldB) => @ |
3198 | obj = new {}, 123, "abc" | 3204 | obj = new {}, 123, "abc" |
3199 | print obj | 3205 | print obj |
3200 | </pre> | 3206 | </pre> |
@@ -3331,7 +3337,7 @@ file = with File "favorite_foods.txt" | |||
3331 | Or⦠| 3337 | Or⦠|
3332 | 3338 | ||
3333 | ```moonscript | 3339 | ```moonscript |
3334 | create_person = (name, relatives)-> | 3340 | create_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> |
3343 | create_person = (name, relatives)-> | 3349 | create_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 | ||
3468 | run_callback = (func)-> | 3474 | run_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 | ||
3487 | run_callback = (func)-> | 3493 | run_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 |
3545 | i = 100 | 3551 | i = 100 |
3546 | 3552 | ||
3547 | my_func = (using nil)-> | 3553 | my_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 | ||
3550 | my_func! | 3556 | my_func! |
@@ -3554,7 +3560,7 @@ print i -- prints 100, i is unaffected | |||
3554 | <pre> | 3560 | <pre> |
3555 | i = 100 | 3561 | i = 100 |
3556 | 3562 | ||
3557 | my_func = (using nil)-> | 3563 | my_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 | ||
3560 | my_func! | 3566 | my_func! |
@@ -3568,7 +3574,7 @@ Multiple names can be separated by commas. Closure values can still be accessed, | |||
3568 | tmp = 1213 | 3574 | tmp = 1213 |
3569 | i, k = 100, 50 | 3575 | i, k = 100, 50 |
3570 | 3576 | ||
3571 | my_func = (add using k, i)-> | 3577 | my_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 | |||
3581 | tmp = 1213 | 3587 | tmp = 1213 |
3582 | i, k = 100, 50 | 3588 | i, k = 100, 50 |
3583 | 3589 | ||
3584 | my_func = (add using k, i)-> | 3590 | my_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 |