Luaridaで電卓
ポケコンを目指すといっているので、計算くらいはできないと・・・、ということで電卓サンプルを作りました。
プログラム自体は計算式をそのままLuaVMに流しているだけです。
------------------------------------------ --電卓 ------------------------------------------ --関数宣言-------------------------------- main={} --mainメソッド --グローバル変数宣言---------------------- ------------------------------------------ mt={} mt.__newindex=function(mtt,mtn,mtv) dialog( "Error Message", "宣言していない変数 "..mtn.." に値を入れようとしています", 0 ) touch(3) end mt.__index=function(mtt,mtn) dialog( "Error Message", "変数 "..mtn.." は宣言されていません", 0 ) touch(3) end setmetatable(_G,mt) --------以下が実プログラム---------------- ------------------------------------------ --メインプログラム ------------------------------------------ function main() local moji local ans local a local w,h --画面サイズを求める w, h = canvas.getviewSize() while(true)do canvas.drawCls( color(255,255,255) ) --背景を白に moji,a = editText("計算式を入力してください。Canselまたは戻るボタンで終了します。") --テキスト入力 if( a==1 and moji~="" )then if( loadstring( "return {"..moji.."}" )()[1]~=nil )then canvas.drawTextBox( "式: "..moji, 0, 0, 28, color(0,0,0), w ) ans = loadstring( "return {"..moji.."}" )()[1] --Luaで計算実行 canvas.drawTextCenter( "答え: "..ans, w/2, 100, 28, color(0,0,0) ) --結果表示 touch(3) --タッチ待ち end else break end end end main()
loadstring()を用いて、入力した計算式をLuaVMに渡しています。計算式で無いものを間違って入力すると、LuaVMがエラーを返してくるので、Luaridaが落ちます。対応したつもりだけど落ちた・・・。