スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--.--.-- | スポンサー広告

Lua5.1.3 SJIS版の更新と三項演算子など

またSJIS対応版の更新をサボっておりましたが、アップデートしました。
lua-5.1.3-mbenc.zip

詳しくはこちらへどうぞ。
Lua@空想具現化プログラミング

だいたい差分の適用作業とパッケージングはバッチファイル+Luaで自動化してるのですが、
exeのビルド、zip、アップロード、記事修正まで自動化してしまいたい気分です。

 

関連で少し気になっている点としては、LuaForgeでいろいろと公開されているようなLua対応のモジュールを動かしたい場合は、LuaBinariesと同様の方法でビルドして、LuaのDLLを作らないといけないという事ですね。DLLにしないと、実行時にLuaの実装やCランタイムライブラリが複数(メインプログラムとモジュールとで)存在する状態になり、特にメモリまわりで異常な動作を起こしてしまいます。ただしLuaBinaries風にするためには、VC2003以前ではシングルスレッドでコンパイルしないといけないとか、いくつか制限が出てくるようなので、様子見状態です。VC2005でやってみる手はありますが。

 

なお、Lua5.1.3はLua5.1.2のバグフィックス版です。
そう簡単に遭遇するバグでもなさそうです。>http://www.lua.org/bugs.html#5.1.3

 

SJIS版はこちらのネットワーク対戦型カードゲーム「ABCD」で使っていただいている模様。ありがとうございますm(__)m
かなり高い拡張性を実現しているカードゲームのようですが、その拡張性にLuaが一役買っているとしたら、すばらしいですね。

 

小技:3項演算子

ついでに、あまり知られていないような気がする(※1)Luaの小技を紹介しておきます。


C言語でいう3項演算子をシンプルに書く方法です。

C言語では、

X = S ? A : B

のように書くと、Sが真ならばAがXに代入され、Sが偽ならばBがXに代入されます。
これを、Luaでは、

X = S and A or B

と書けます。

Lua 5.1 リファレンスマニュアルによれば、

>論理積演算子 and は、最初の引数が falsenil ならその値を返し、そうでなければ二番目の引数を返す。
>論理和演算子 or は最初の引数が falsenil 以外ならその値を返し、そうでなければ二番目の引数を返す。
>andor は共にショートカット評価を行う。つまり、二番目のオペランドは、それが必要なときだけ評価される。

こういう仕様のためにこういう動作になるんですね~。
あとこの動作を利用して、

X = S or default_value

のように、Sがnilまたはfalse(※2)の場合にデフォルト値を入れたり、

X = play() or die()

のように書いて、前の関数(play)が偽の値を返したら後ろの関数(die)を評価して、プログラムを終了させるようなことも可能です。PerlとかPHPでよくあるやつです。あ、ちなみにdie()という関数はありませんので、

function die() os.exit(0) end

のような実装だと想定してください。

 

でも、

X = S and A and B or C and D or E

とか書いて、見る者を混乱させることは控えましょうね!
人に見られる可能性のあるソースであれば、

X = S and A or B -- 3項演算子です

ってぐらいの控えめさが求められるように思います。

 

※1 ぐぐってみると、tattyuさんが既に書かれてました。Lua 3項演算子 - lolipop candy(fruit strawberry) 

※2 Sがfalseの場合にもデフォルト値が入ってしまうのは想定外だ、という場合は、(S~=nil) or default_value のように書く必要があります。このため、あまりこの仕様はエレガントじゃない!という意見もあるようです。

スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

2008.02.23 | Comments(0) | Trackback(0) | Lua

新しい記事へ <<  | HOME |  >> 古い記事へ

広告:

FC2Ad

カテゴリ展開メニュー

  • 未分類(13)
  • Lua(38)
  • プログラミング(11)
  • 食べ物(3)
  • SPAM(2)
  • ゲーム開発(4)
  • GIS/GPS/GoogleMaps(2)
  • スポーツ(1)
  • Skype API(1)
  • AR(1)

はてブ ランキング

ブログ全体: このWikiのはてなブックマーク数

プロフィール

はむ!

Author:はむ!
よく使う言語・環境:
C++,C,Lua,java,VBA,DB
たまにPHPとかjavascript
血液型:O型

メール: lua%ham.nifty.jp
(%を@に変えてください)
ついったー: @hammmm

Lua関連アンテナ

ブロとも申請フォーム

この人とブロともになる

全記事表示リンク

全ての記事を表示する

ブログ内検索


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。