FS API ã使ãããªãã(10): 颿°ã®å¼æ°ãæè»ã«åãæ±ã
ååã®ã話
ååç´¹ä»ããlogging API (ver. 0.2)ã使ããã¨ã§ãä»»æã®é¢æ°ã«ãã°è¨é²æ©è½ãç°¡åã«ã¤ããããããã«ãªãã¾ããã
åé¡ç¹
ã§ã使ã£ã¦ã¿ã¦æ°ã¥ãã¾ããã§ããï¼
対象ã¨ãªã颿°ã弿°ãå¿ è¦ãªã¿ã¤ãã®ã¨ãã«ããã®å¼æ°ããã¾ãå¦çã§ãã¦ããªãã®ã§ãããã
ã¤ã¾ãã
os.loadAPI("logging") forward = logging.createLoggedFunc(turtle.forward, "-- OK", "--Failed") forward()
ãã®ããã«turtle.forward()ã¨ãã弿°ãå¿ è¦ãªã颿°ãªãã°åé¡ãªãã®ã§ããã
次ã®ããã«å¼æ°ãå¿ è¦ã¨ãªã颿°ã ã¨åé¡ãçãã¾ã
os.loadAPI("logging") select = logging.createLoggedFunc(turtle.select, "-- OK", "--Failed") select(10)
å®éã«ãã®ããã°ã©ã ãåããã¨ããturtle.select()ã«å¼æ°ãæå®ããã¦ãªããã§ããã©ï¼ãï¼æè¨³ï¼ã¨ããã¨ã©ã¼ãåºã¦ãã¾ããselect(10)
ã®ããã«å®è¡æã«æå®ãã¦ããã®ã«ãï¼ï¼
createLoggedFunc()
颿°ãä¿®æ£ããªãã¦ã¯ããã¾ããã
ãã ãåé¡ã¨ãªãã®ã¯ããã°æ©è½ãã¤ããã颿°ããããã¤å¼æ°ãã¨ããããããªãã¨ããã§ãã
ãã¨ãã°turtle.select()
ã¯å¼æ°1ã¤ã ãã§ããããã§ãå ´åã«ãã£ã¦ã¯ããã¨ã弿°ã10åãããããªé¢æ°ã§ããã°æ©è½ä»ãã«ã§ããªãã¦ã¯ãªãã¾ããã
ãã¦ã©ãããã°ããã®ã§ããããã
ãããªãçã
ååç´¹ä»ããAPIã§ã該å½é¨åãæç²ããã¨æ¬¡ã®ããã«ãªã£ã¦ãã¾ããã
function createLoggedFunc(func, succeeded_log, failed_log) failed_log = failed_log or succeeded_log return function() local status, error_msg = func() if status then write(succeeded_log) else write(failed_log) end return status, error_msg end end
ãã®é¢æ°å®ç¾©ã§ã以ä¸ã®ããã«ã2ç®æã ããã...ããå ¥ãã¦ãã ãããããã ãã§OKã§ãã
function createLoggedFunc(func, succeeded_log, failed_log) failed_log = failed_log or succeeded_log return function(...) local status, error_msg = func(...) if status then write(succeeded_log) else write(failed_log) end return status, error_msg end end
ãªãããã®ä¿®æ£ãåæ ãããlogging API (ver. 0.3)ã以ä¸ã«ããã¦ããã¾ãã
Luaã®é¢æ°ã¯å¼æ°ã®æ°ã«ã¤ãã¦å¯å®¹ãªã®ã§ã
Luaã¯JavaãCè¨èªãªã©ã¨ã¯ç°ãªãã颿°ã®å¼æ°ã®æ°ãéã£ã¦ãã¦ãã¨ã©ã¼ãè¿ãã¾ããã
å ·ä½çã«ä¾ã示ãã¾ãããã
# 弿°ã2ã¤ã¨ãããããã夿°x,yã«ä»£å ¥ãã¦ãããããprintãã颿°ãå®ç¾© lua> function argTest(x,y) print(x); print(y); end # 弿°2ã¤ã§å®è¡ããã¨ãå½ç¶ãªããæ¬¡ã®ããã«ãªã lua> argTest("abc", "def") abc def # å®è¡æã«ãå®ç¾©ããã¨ããããå¤ã弿°ãä¸ããã¨ã # å¤ã弿°ã¯æ¨ã¦ããã¦ãå®ç¾©ãããæ°ã®å¼æ°ãã使ããªã lua> argTest("abc", "def", "ghi") abc def
ã§ã¯éã«ãå®ç¾©ããã¨ããããä¸ãã弿°ã®æ°ãå°ãªãã¨ãã¯ã©ããªãã§ããããã
lua> argTest("abc") abc (空è¡)
(2014/06/21ä¿®æ£ãfalseÃãnilâ)
è¶³ããªã弿°ã«ã¯ãnilããä»£å ¥ããã¦ãããã®ã¨ãã¦é¢æ°ãå®è¡ãã¾ãã
ä¸è¨ã®å ´åã§è¨ããªãã°ã弿°"abc"ããä¸ããããªãã£ãã®ã§ã1çªç®ã®å¼æ°ã¨ãã¦"abc"ã2çªç®ã®å¼æ°ã¨ãã¦nilãä¸ããããã¨å¦çããã¾ãã
ã¤ã¾ããå®éã®å®è¡å
容ã¯ãprint("abc"); print(nil);
ã¨ãªãã¾ãã
ã ããæå¾ã¯ã空è¡ã表示ãããã®ã§ãã
ãã®ãããªä»æ§ã«ãããLuaã¯æè»ã«é¢æ°ãå®ç¾©ã§ããã®ã§ããé¢ç½ãã§ããã
ãã ããã®ä»æ§ã«ã¯æ¬ ç¹ãããã¾ããããã¯ãæè»ã«æ±ãã䏿¹ã§ãã°ããã£ãã¨ãã«ãªããªãæ°ã¥ããªãã¨ãã£ãåé¡ã§ãã
3ã¤ã®å¼æ°ãå¿ è¦ã¨ãã¦ãã颿°ãªã®ã«å¼æ°2ã¤ã§å®è¡ãã§ãLuaã¯ã¨ã©ã¼ãè¿ããã«æ®éã«ãã®é¢æ°ãå®è¡ãã¾ãã ããã¦ãLuaã¯ã¨ã©ã¼ãè¿ããªãããã©ããã®é¢æ°ã®ä¸ã®å¦çã§nilã®ããã§ç»é¢è¡¨ç¤ºãçã£ããè¨ç®ããããããªã£ããã¨å¾ããå°æããã
Luaããã°ã©ãã³ã°ã«ããç¨åº¦æ £ãã¦ããã¨ããããããã¿ã ã£ãããã¾ãã
å¯å¤é·å¼æ°ãåãæ±ã
ããã¾ã§ã¯ã颿°å®ç¾©æã«æ±ºãã¦ããã弿°ã®æ°ã¨é¢æ°å®è¡æã®å¼æ°ã®æ°ãé£ãéã£ã¦ãã¦ããLuaã¯æè»ã«å¦çãã¦ããã¾ããã¨ããã話ã§ããã
ããã«å¯¾ãã¦ãããã¤å¼æ°ãã¨ã£ã¦ããã¾ããªãã¨ãã颿°ãå®ç¾©ãããã¨ãã§ãã¾ãã
function manyArgTest(...) local arg1, arg2, arg3 = ... print('arg1: ', arg1) print('arg2: ', arg1) print('arg3: ', arg1) end manyArgTest(1,2,3,4,5,6,7,8,9,10)
ãã®ããã°ã©ã ã§ã¯ãå¯å¤é·å¼æ°ãã¾ã¨ãã¦ãããã...ãã¨ããå¼ã使ã£ã¦ãã¾ãã
ãã®ããã°ã©ã ã§ã¯1ãã10ã¾ã§è¨10åã®å¼æ°ãä¸ãã¦å®è¡ãã¦ãã¾ãã
ãã®çµæãmanyArgTest()å é¨ã§ã¯ãã...ãã¨ããå¼ãããã10åã®å¼æ°ãã¾ã¨ãããã®ã«ãªãã¾ãã
2è¡ç®ã§ãããã10åã®å¼æ°ã®ãã¡å é ã®3åãarg1,arg2,arg3ã®3ã¤ã®å¤æ°ã«ä»£å ¥ãã¦ãç»é¢è¡¨ç¤ºãã¦ãã¾ãã
ã§ããã®ããã°ã©ã ã¯ä¸å®å ¨ã§ãããã¨ãã°å¼æ°ã10åãããã¡ã®10çªç®ã使ãããã£ããã©ãããã°ããã®ã§ãããã
arg1ããarg10ã¾ã§ã®å¤æ°ããããããç¨æãã¦ããï¼ãã§ã弿°ã100åãªãarg100ã¾ã§ã®å¤æ°ãå¿ è¦ã«ãªãã¾ããã*1ã
ãããªã¢ããªããã°ã©ã ãæ¸ããªãã¦ã¨ãã§ããªãï¼ã
以ä¸ã®ããã«ãã³ã³ã¹ãã©ã¯ã¿å¼ã{}ãã使ãã¾ãããã
function manyArgTest(...) local args = {...} print('arg1: ', arg[1]) print('arg2: ', arg[2]) print('arg3: ', arg[3]) end manyArgTest(1,2,3,4,5,6,7,8,9,10)
2è¡ç®ã§ã{...}ãã¨è¨è¿°ãããã¨ã«ãããè¨10åã®å¼æ°ãä¸ã¤ã®é åï¼ãã¼ãã«ï¼ã¨ãã¦ã¾ã¨ãããã¾ãã
ãã®å¼æ°é åã¯å¤æ°argsã«ä»£å ¥ãã¦ãã¾ãã®ã§ããã¨ãã°10çªç®ã®å¼æ°ãåãåºããããªãã°ãargs[10]ã®ããã«ãã¾ãããã100çªç®ãªãargs[100]ã§ãã
ãªãã以ä¸ã®ããã°ã©ã ã¯å¼æ°ãç¡éã«ã¨ããã¨ãã§ãã颿°ã®ä¾ã§ãã
function add(...) local sum = 0 for i,v in ipairs({...}) do sum = sum + v end return sum end add(1,2,3,4) -- => 10 add(1,2,3,4,5,6,7,8,9,10) -- => 55
ããããã°ããã®ãããªå¼æ°ãç¡éã«ã¨ããã¨ãã§ãã颿°ã®ä¾ã¨ãã¦print()
ãããã¾ãããã
lua> print(1,2,3,4,5) 12345
ã©ããã§è¦ããã¨ãªãã§ããï¼ãargs={...}
ã¨ããã§ãargs={...}
ã¨ããè¨è¿°ãããã¾ã§çµæ§ãªé »åº¦ã§è¦ã¦ãã¾ãããï¼ ãããããã°ã©ã å®è¡æã®å¼æ°ãåãæ±ãããã«å©ç¨ãã¦ãã¾ããã
ãã¤ã¯ãã®ã...ãã¨ããå¼ã¯ã颿°å®è¡æã®å¯å¤é·å¼æ°ãã¾ã¨ããã ãã§ãªããããã°ã©ã å®è¡æã®å¯å¤é·å¼æ°ãã¾ã¨ããæ©è½ãããã¾ãã
args = {...} -- #é åãã¨ããè¨è¿°ã§é åã®è¦ç´ æ°ãè¿ãã¾ãã if #args == 0 then error('invalid arguments') end
ãªã©ã¨ããããã«ãããã°ã©ã å®è¡æã«å¿ ã弿°ã®å ¥åãæ±ãããããªããã°ã©ã ãæ¸ããã¨ãã§ãã¾ãã
ãããã«
以ä¸ãé·ã ã¨èª¬æãã¾ããã以ä¸ã®ããã«ã¾ã¨ãããã¨ã§ãã¾ãã
- Luaã®é¢æ°ã¯ãå®ç¾©æã®å¼æ°ã®æ°ã¨å®è¡æã®å¼æ°ã®æ°ãéã£ã¦ãã¦ãåé¡ãªãåã
- å®è¡æã«å¤ãã«å¼æ°ãä¸ããã¨ãä½ã£ãåã®å¼æ°ã¯æ¨ã¦ãããã
- å®è¡æã«å°ãªãã«å¼æ°ãä¸ããã¨ãè¶³ããªãåã®å¼æ°ã«ã¯ãfalseãä»£å ¥ãããã¨å¦çããã
- 弿°ãä½åã§ãããï¼å¯å¤é·å¼æ°ï¼é¢æ°ãå®ç¾©ã§ãã
- ã...ãã§å¯å¤é·å¼æ°ãã¾ã¨ãããã¨ãã§ãã
- å®éã«å¯å¤é·å¼æ°ãåãæ±ãã¨ãã«ã¯ã
args = {...}
ã¨è¤æ°ã®å¼æ°ãä¸ã¤ã®é åã«ã¾ã¨ããæ¹ãåãæ±ãããããã
*1:弿°ã100åå¿ è¦ã¨ãããããªé¢æ°ãå®ç¾©ãããã¨ãªãã¦å®éã«ã¯ãããã¾ãããï¼ãã¨ã話ã§ããï¼ãä¸è¬çã«ã弿°ã®æ°ãå¤ããªãã¨ç®¡çã大å¤ã«ãªãã®ã§ãæ®éã¯ãã¼ãã«ã弿°ã¨ãã¦æ¸¡ãã¾ãã