コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

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が落ちます。対応したつもりだけど落ちた・・・。