日記スマートフォン用の表示で見るたーせる日記2013-04-21LuaとあそぼうLuaくろねこさんがLuaを覚えたがっていたので。2013年4月18日ちなみに検証に使用したLuaのバージョンは現時点での最新版である5.2.2です。書き方は3種類くらいあります。World]])上記の3つのコードはいずれも文字列リテラルを表現する構文ですが、挙動が多少異なります。print("こんにちは\n今日はよい天気です")というコードは、以下のように書いた場合と同様の実行結果になります。print([[こんにちは今日はよい天気です]])Luaの変数Luaは動的型付け言語なので、特に型指定なしに変数を使用することができます。一般的な静的型付け言語では整数と浮動小数点数は区別されますが、Luaならば以下のようなスクリプトもエラーなく実行できます。y)なお、実行結果は「13.14」がコンソール上に表示されます。文字列の場合、リテラルを連結するための特殊な構文が存在します。「..」で文字列を連結します実行結果はこんな感じです。代入することもあります。変数は、何もしないと自動的にグローバル変数になります。付けるとローカル変数として扱われるようになります。do〜endブロック(C++の波括弧に相当)の中で作られたローカル変数は、ブロックの外に出るときに壊されてしまいます。nilになる多重代入Luaには多重代入が可能な性質があります。30がそれぞれ代入されます。30すべての値を評価後に代入処理が実行されるため、2変数の値を交換するために一時変数を確保する必要はありません。ここは感覚的に理解しやすいところなので、解説控えめで流したいと思います。end波括弧言語になじんでいると、構文の微妙な違いに戸惑うかも知れません。なんで統一しないんだ。C++の&&、||演算子は、Luaではand、orになります。なんで統一しないんだ。ちなみに、Luaでは条件式を短絡評価するため、この性質を利用して変数の値の設定を以下のように書くことができます。混ざらないようにする比較的有名なテクニックです。データ構造Luaは、最も強力かつ唯一のデータ構造として「テーブル」をサポートしています。近いものと考えればよいでしょう。場合、任意の異なる型の情報を一つのテーブルに格納できるため、他言語における連想配列や辞書と必ずしも同一ではありません。配列テーブルを配列として使用することができます。配列のインデックスは1オリジンなので注意が必要です。要素に配列をセットすることで、多次元配列を再現できます。テーブルにキーと値をペアを格納する事で再現できます。テーブル名["キー"]は、テーブル名.キーとも書けるので、C言語の構造体のような感覚でデータ操作を行うこともできます。以下のコードをご覧ください。関数は、functionとendの間に記述します。World")余談ですが、Luaの関数は複数の戻り値を返すこともできます。変数に関数を代入できるため、上記コードは以下のように書くこともできます。同様に、テーブルの要素にも関数をセットすることが可能です。......ここまで読んで下さった方に悲しいお知らせをしますが、この辺から急激に難易度が上がります。内容的にも高度なトピックであることに加えて、他言語で培った知識が今ひとつ役に立たないため、ここまで順調に理解できたとしてもこの先で沈む可能性があります。それでは怒濤のラスト2章、メタテーブルとクラスをご覧ください。メタテーブルLuaにはメタテーブルと呼ばれる特殊なテーブルがあります。言うと演算子のオーバーロードに相当する仕組みです。一つ例を示しましょう。print(vector1[i])endこれを実行すると、結果はこんな感じになります。メタテーブルに登録できるキーのうち、比較的よく使いそうなものを独断と偏見で選んで以下にまとめました。(比較演算子)委譲また、__indexが定義されたメタテーブルを任意のテーブルにセットすると、そのテーブルの挙動が少し変わります。検索を試みるようになります。百聞は一見に如かずと言いますので、簡単なサンプルをお見せします。存在しないにもかかわらず、表示されていることがわかりますね。オブジェクト指向的に活用するための強力な仕組みなのです。クラス先ほどのメタテーブルを使うと、テーブルをクラスのように利用できるようになります。ここでは簡単なクラスを作ってみます。ポインタ使ってないからこわくないよ。こんなふうにつかいます。0;}いかがでしょう。そこまで複雑なことはしていないので、コードを読めばだいたい何をしているのかお解りいただけると思います。書くには、メタテーブルの助けが必要です。Tercel")obj2.printString(obj2)メンバ関数の第一引数にインスタンス自身を渡しているのは、その関数がどのインスタンスから呼ばれたのかを識別する必要があるからです。C++でも、裏では似たような仕組みが動いており、単にプログラマが意識せずに済んでいるだけに過ぎません。Luaには糖衣構文があり、上記のスクリプトは以下のように書き換えることができます。これでメンバ関数にわざわざ自分自身を引き渡す必要がなくなります。介してアクセスします。ポインタに相当するものです。最後なのでcatのおまけつき。長くなってしまったので、今日はここまで。クイズをやっ...2014-01-10NSPredicateで遊ぶこんにちは。@pi_cro_s.はてなブログをはじめよう!tercel_sさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。