Mercurial Hosting > luan
comparison website/src/manual.html.luan @ 502:d3183a330ff5
improve the __index metamethod to work with any type;
simplify luan_proxy to eliminate base;
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Tue, 19 May 2015 17:57:20 -0600 |
parents | 598123096772 |
children | 92c3d22745b8 |
comparison
equal
deleted
inserted
replaced
501:f26485a3692c | 502:d3183a330ff5 |
---|---|
341 <p> | 341 <p> |
342 Here are the events: | 342 Here are the events: |
343 | 343 |
344 <ul> | 344 <ul> |
345 | 345 |
346 <li><b>"add": </b> | 346 <li><p><b>"add": </b> |
347 the <tt>+</tt> operation. | 347 the <tt>+</tt> operation. |
348 | 348 |
349 If any operand for an addition is a table, | 349 If any operand for an addition is a table, |
350 Luan will try to call a metamethod. | 350 Luan will try to call a metamethod. |
351 First, Luan will check the first operand (even if it is valid). | 351 First, Luan will check the first operand (even if it is valid). |
358 is the result of the operation. | 358 is the result of the operation. |
359 Otherwise, | 359 Otherwise, |
360 it raises an error. | 360 it raises an error. |
361 </li> | 361 </li> |
362 | 362 |
363 <li><b>"sub": </b> | 363 <li><p><b>"sub": </b> |
364 the <tt>-</tt> operation. | 364 the <tt>-</tt> operation. |
365 | 365 |
366 Behavior similar to the "add" operation. | 366 Behavior similar to the "add" operation. |
367 </li> | 367 </li> |
368 | 368 |
369 <li><b>"mul": </b> | 369 <li><p><b>"mul": </b> |
370 the <tt>*</tt> operation. | 370 the <tt>*</tt> operation. |
371 | 371 |
372 Behavior similar to the "add" operation. | 372 Behavior similar to the "add" operation. |
373 </li> | 373 </li> |
374 | 374 |
375 <li><b>"div": </b> | 375 <li><p><b>"div": </b> |
376 the <tt>/</tt> operation. | 376 the <tt>/</tt> operation. |
377 | 377 |
378 Behavior similar to the "add" operation. | 378 Behavior similar to the "add" operation. |
379 </li> | 379 </li> |
380 | 380 |
381 <li><b>"mod": </b> | 381 <li><p><b>"mod": </b> |
382 the <tt>%</tt> operation. | 382 the <tt>%</tt> operation. |
383 | 383 |
384 Behavior similar to the "add" operation. | 384 Behavior similar to the "add" operation. |
385 </li> | 385 </li> |
386 | 386 |
387 <li><b>"pow": </b> | 387 <li><p><b>"pow": </b> |
388 the <tt>^</tt> (exponentiation) operation. | 388 the <tt>^</tt> (exponentiation) operation. |
389 | 389 |
390 Behavior similar to the "add" operation. | 390 Behavior similar to the "add" operation. |
391 </li> | 391 </li> |
392 | 392 |
393 <li><b>"unm": </b> | 393 <li><p><b>"unm": </b> |
394 the <tt>-</tt> (unary minus) operation. | 394 the <tt>-</tt> (unary minus) operation. |
395 | 395 |
396 Behavior similar to the "add" operation. | 396 Behavior similar to the "add" operation. |
397 </li> | 397 </li> |
398 | 398 |
399 <li><b>"concat": </b> | 399 <li><p><b>"concat": </b> |
400 the <tt>..</tt> (concatenation) operation. | 400 the <tt>..</tt> (concatenation) operation. |
401 | 401 |
402 Behavior similar to the "add" operation. | 402 Behavior similar to the "add" operation. |
403 </li> | 403 </li> |
404 | 404 |
405 <li><b>"len": </b> | 405 <li><p><b>"len": </b> |
406 the <tt>#</tt> (length) operation. | 406 the <tt>#</tt> (length) operation. |
407 | 407 |
408 If there is a metamethod, | 408 If there is a metamethod, |
409 Luan calls it with the object as argument, | 409 Luan calls it with the object as argument, |
410 and the result of the call | 410 and the result of the call |
413 If there is no metamethod but the object is a table, | 413 If there is no metamethod but the object is a table, |
414 then Luan uses the table length operation (see <a href="#length">The Length Operator</a>). | 414 then Luan uses the table length operation (see <a href="#length">The Length Operator</a>). |
415 Otherwise, Luan raises an error. | 415 Otherwise, Luan raises an error. |
416 </li> | 416 </li> |
417 | 417 |
418 <li><b>"eq": </b> | 418 <li><p><b>"eq": </b> |
419 the <tt>==</tt> (equal) operation. | 419 the <tt>==</tt> (equal) operation. |
420 | 420 |
421 Behavior similar to the "add" operation, | 421 Behavior similar to the "add" operation, |
422 except that Luan will try a metamethod only when the values | 422 except that Luan will try a metamethod only when the values |
423 being compared are both tables | 423 being compared are both tables |
424 and they are not primitively equal. | 424 and they are not primitively equal. |
425 The result of the call is always converted to a boolean. | 425 The result of the call is always converted to a boolean. |
426 </li> | 426 </li> |
427 | 427 |
428 <li><b>"lt": </b> | 428 <li><p><b>"lt": </b> |
429 the <tt><</tt> (less than) operation. | 429 the <tt><</tt> (less than) operation. |
430 | 430 |
431 Behavior similar to the "add" operation. | 431 Behavior similar to the "add" operation. |
432 The result of the call is always converted to a boolean. | 432 The result of the call is always converted to a boolean. |
433 </li> | 433 </li> |
434 | 434 |
435 <li><b>"le": </b> | 435 <li><p><b>"le": </b> |
436 the <tt><=</tt> (less equal) operation. | 436 the <tt><=</tt> (less equal) operation. |
437 | 437 |
438 Unlike other operations, | 438 Unlike other operations, |
439 The less-equal operation can use two different events. | 439 The less-equal operation can use two different events. |
440 First, Luan looks for the "<tt>__le</tt>" metamethod in both operands, | 440 First, Luan looks for the "<tt>__le</tt>" metamethod in both operands, |
444 assuming that <tt>a <= b</tt> is equivalent to <tt>not (b < a)</tt>. | 444 assuming that <tt>a <= b</tt> is equivalent to <tt>not (b < a)</tt>. |
445 As with the other comparison operators, | 445 As with the other comparison operators, |
446 the result is always a boolean. | 446 the result is always a boolean. |
447 </li> | 447 </li> |
448 | 448 |
449 <li><b>"index": </b> | 449 <li><p><b>"index": </b> |
450 The indexing access <tt>table[key]</tt>. | 450 The indexing access <tt>table[key]</tt>. |
451 | 451 |
452 This event happens | 452 This event happens |
453 when <tt>key</tt> is not present in <tt>table</tt>. | 453 when <tt>key</tt> is not present in <tt>table</tt>. |
454 The metamethod is looked up in <tt>table</tt>. | 454 The metamethod is looked up in <tt>table</tt>. |
455 | 455 |
456 | 456 |
457 <p> | 457 <p> |
458 Despite the name, | 458 Despite the name, |
459 the metamethod for this event can be either a function or a table. | 459 the metamethod for this event can be any type. |
460 If it is a function, | 460 If it is a function, |
461 it is called with <tt>table</tt> and <tt>key</tt> as arguments. | 461 it is called with <tt>table</tt> and <tt>key</tt> as arguments. |
462 If it is a table, | 462 Otherwise |
463 the final result is the result of indexing this table with <tt>key</tt>. | 463 the final result is the result of indexing this metamethod object with <tt>key</tt>. |
464 (This indexing is regular, not raw, | 464 (This indexing is regular, not raw, |
465 and therefore can trigger another metamethod.) | 465 and therefore can trigger another metamethod if the metamethod object is a table.) |
466 </li> | 466 </li> |
467 | 467 |
468 <li><b>"new_index": </b> | 468 <li><p><b>"new_index": </b> |
469 The indexing assignment <tt>table[key] = value</tt>. | 469 The indexing assignment <tt>table[key] = value</tt>. |
470 | 470 |
471 Like the index event, | 471 Like the index event, |
472 this event happens when | 472 this event happens when |
473 when <tt>key</tt> is not present in <tt>table</tt>. | 473 when <tt>key</tt> is not present in <tt>table</tt>. |
491 (If necessary, | 491 (If necessary, |
492 the metamethod itself can call <a href="#Luan.raw_set"><tt>raw_set</tt></a> | 492 the metamethod itself can call <a href="#Luan.raw_set"><tt>raw_set</tt></a> |
493 to do the assignment.) | 493 to do the assignment.) |
494 </li> | 494 </li> |
495 | 495 |
496 <li><b>"call": </b> | 496 <li><p><b>"call": </b> |
497 The call operation <tt>func(args)</tt>. | 497 The call operation <tt>func(args)</tt>. |
498 | 498 |
499 This event happens when Luan tries to call a table. | 499 This event happens when Luan tries to call a table. |
500 The metamethod is looked up in <tt>func</tt>. | 500 The metamethod is looked up in <tt>func</tt>. |
501 If present, | 501 If present, |