LevelUp! Studio » function https://blog.levelup.in.th Experience the new world. Fri, 26 May 2017 10:06:07 +0000 th hourly 1 http://wordpress.org/?v=3.8.1 [Lua] ฟังก์ชั่นรีเทิร์นหลายค่าและฟังก์ชั่นแบบรับค่าไม่ต้องครบตาม Arguments https://blog.levelup.in.th/2015/03/31/lua-make-a-function-return-many-parameters-and-a-function-with-optional-arguments/ https://blog.levelup.in.th/2015/03/31/lua-make-a-function-return-many-parameters-and-a-function-with-optional-arguments/#comments Tue, 31 Mar 2015 06:44:09 +0000 http://blog.levelup.in.th/?p=4225 เนื่องจากเพิ่งมาเขียน Lua เดือนนี้ ก็มีโค้ดที่เกี่ยวกับฟังก์ชั่นที่ช่วยให้การทำงานสะดวกสบายขึ้นมานำเสนอฮะ

อันแรก ฟังก์ชั่นในลัวร์รีเทิร์น 2 ค่า อันนี้ไม่แน่ใจว่าภาษาไหนทำได้บ้างแต่จากที่เคยเขียนมาเพิ่งเจอในภาษานี้ครับ อเมซซิ่งมากๆ
local a,b = 1,2
function test2Params(x,y)
return x+1,y+2 --รีเทิร์นสองพารามิเตอร์
end
print('local a,b:'..a..','..b)
a,b = test2Params(a,b)
print('test2Params(a,b):'..a..','..b)

ถัดมาอันนี้เป็นวิธีอ้อม เนื่องจากเราไม่สามารถกำหนด Default Parameter ลงไปในการประกาศฟังก์ชั่นตรงๆ แบบ PHP/AS3 ได้ และยังไม่สามารถ Override ฟังก์ชั่นแบบ C# ได้ แต่สามารถรับไม่ครบมาเช็คค่าด้านในแบบนี้ดื้อๆได้เลยครับ
function testOptionalParams(x,y) -- รับสองตัวแปร
if (y == nil ) then -- ถ้าส่งมาแค่ x (y ไม่ส่งมา) ก็ให้ y เป็นสักค่า
y = 0;
end
return x+y
end
a = testOptionalParams(a)
print('testOptionalParams(a):'..a)
a = testOptionalParams(a,b)
print('testOptionalParams(a,b):'..a)

จากโค้ดทั้งสองชุดด้านบน รันแล้วจะได้ผลลัพธ์ดังนี้ครับ

local a,b:1,2
test2Params(a,b):2,4
testOptionalParams(a):2
testOptionalParams(a,b):6

]]>
https://blog.levelup.in.th/2015/03/31/lua-make-a-function-return-many-parameters-and-a-function-with-optional-arguments/feed/ 0
addFrameScript with parameters https://blog.levelup.in.th/2009/12/01/addframescript-with-parametersaddframescript-with-parameters/ https://blog.levelup.in.th/2009/12/01/addframescript-with-parametersaddframescript-with-parameters/#comments Mon, 30 Nov 2009 18:32:22 +0000 http://blog.levelup.in.th/?p=335 AS3 จะมีฟังค์ชัน addFrameScript เป็นฟังค์ชั่นของออบเจค MovieClip ใช้สำหรับให้รันฟังค์ชันที่กำหนดไว้เมื่อ movieClip รันมาถึงเฟรมที่เรากำหนดไว้

MovieClip.addFrameScript(frame_number:uint,function_to_call:Function)

frame_number – เฟรมที่เราต้องการให้ฟังค์ชั่นของเราเริ่มทำงาน มีการลำดับเฟรมแบบเริ่มต้นที่ 0

function_to_call – ฟังค์ชันที่เราต้องการให้เรียก

function helloworld ()

{

trace( “hello world!” );

}

this.addFrameScript( 1, helloworld );

แต่เราไม่สามารถใช้ตัวแปรอะไรเข้าไปในฟังค์ชันได้เลย แต่มีวิธีที่จะทำให้ส่งผ่านตัวแปรได้ คือ เอาชื่อหัวข้อไป search google ก็เจอ = =” อันนี้เป็นวิธีของ Ian Thomas delegate class.

โดยเราจะสร้าง class delegate ขึ้นมา หน้าตาจะเป็นแบบข้างล่าง

package
{

public class Delegate

{

public static function create(handler:Function,…args):Function

{

return function(…innerArgs):void

{

handler.apply(this,innerArgs.concat(args));

}

}

}

}

โดย Delecate.create() จะเป็นฟังค์ชันที่จะช่วยให้เราใช้ตัวแปรใน addFrameScript ได้

วิธีใช้

public function example()

{

for (var i:int=0;i<10;i++)

{

var mc:MovieClip = new Quad() as MovieClip;

addChild(mc);

mc.addFrameScript( mc.totalFrames-1, Delegate.create(myFunction,i) );

}

}

private function myFunction(i:int):void

{

trace(i);

}

Delegate.create( function_to_call:Function, arg1, arg2, … )

unction_to_call – ฟังค์ชันที่เราต้องการให้เรียก

arg1, arg2, … – ตัวแปรที่ต้องการส่งเข้าฟังค์ชัน

]]>
https://blog.levelup.in.th/2009/12/01/addframescript-with-parametersaddframescript-with-parameters/feed/ 0