忍者ブログ

姉好き変態プログラマーの備忘録

色んな言語に手を出そうとする自分へのメモ・・・

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Lua .(ドット)による関数呼び出しと:(コロン)による関数呼び出し

今回は、よく見かける
object.method1()


object:method1()
の違いを調べたので、それについてまとめたいと思います。

拍手

luaではメソッドの呼び出したに「.」と「:」の2つを用いるのですが
どのように使い分けるかというと
「:」を使うと自分自身をメソッドに渡すことができる。
ということです。

これだけじゃ、なんのこっちゃということになるので解説していきます。
まず、Luaではクラスが存在しないので、クラスっぽいことをするためにテーブルというものを使います。
luaでのテーブルは配列の添え字に数字以外も使えるような、配列の進化版って感じでいいと思います。
あとは各要素に入るオブジェクトの型が異なっていてもおっけーです。
なので、同じテーブル内に関数型を持ったり変数(たとえば整数型)を持ったりもできるというわけです。

ようはこのテーブルを使ってクラスっぽいことしちゃおうぜってことです。
c言語で無理やりにクラスを実現させようとして、構造体使ってやるみたいなもんですかね

戻りますが、このテーブルを使うやり方にも問題があって
テーブル内の要素は、自分のいるテーブルの他の要素にはアクセスできないということです。
このため、メソッドに対してテーブル自身を引数として渡す必要が出てきます。
それが以下の例です。

local addTable = {
	na = 1,
	nb = 2,
	add = function(this)
		return this.na + this.nb
	end
	diff_na = function(this, n)
		return this.na - n
	end
}

addTabel.add(addTable)
addTabel.diff_na(addTable, 1)

addTabel:add()
addTabel:diff_na(1)

このように4行目や7行目のメソッドで自分のテーブルを引数としています。
このように、「.」での呼び出しでは自身を引数として与えていますが
「:」での呼び出しでは指定せずに勝手に与えてくれるという特徴があります。
PR

Comment

無題

  • 名無しの弟
  • 2014-03-15 00:33
  • edit
自身のテーブル内に入っているほかの要素の呼び出し方法が理解できました。Thisを使うことで参照できるとは・・・
分かりやすい解説ありがとうございます。

John

I'm seeking weblogs which all have fantastic guidance on what's popular and specifically what the top rated makeup is.. eefckfadeefkkdcg
お名前
タイトル
E-MAIL
URL
コメント
パスワード

Copyright © 姉好き変態プログラマーの備忘録 : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]

管理人限定

プロフィール

HN:
うみ
性別:
男性
趣味:
ソフト開発、ゲーム、機械弄り
自己紹介:
色んな言語に手を出そうとしています
よくわからないことを自分のためにメモします
たまに別のこともつぶやきます
姉しよっ!の海お姉ちゃんが大好きです
・・・変態です

最新コメント

[04/25 Smithe385]
[04/12 名無しの弟]
[04/08 名無しの弟]
[03/29 名無しの弟]
[03/21 名無しの弟]

カレンダー

04 2017/05 06
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

ブログ内検索