Monday, November 28, 2005

Python Lambda & Ruby Block

เห็น mk เขียนเล่าเรื่องเรียนรู้ Ruby แล้ว
มีประเด็นที่สะกิดใจอยู่นิดหนึ่งตรง
เรื่อง iterator ที่ mk ยังคาใจอยู่

ที่สะกิดใจ ก็คือ เกิดความสงสัยว่า python
ก็น่าจะมี concept คล้ายๆแบบนี้เหมือนกัน
ก็เลยลองเปิดหนังสือดู
ก็พบในบทว่าด้วยเรื่อง lambda & filter
ลองดูตัวอย่างนี้

เริ่มที่ ruby ก่อน
ary = [1, 2, 3, 4] 
result = ary.select { |x| x % 2 == 0 }
result # => [2, 4]


ถ้าเขียนแบบเดียวกันใน python
ary = [1, 2, 3, 4]
result = filter(lambda x: x%2 == 0, ary)
print result # => [2, 4]


โจทย์เดียวกัน
ลองเขียน ruby block อีกแบบดู
ary = [1, 2, 3, 4]
prc = lambda {|x| x%2 == 0}
result = ary.select(&prc)
result # => [2, 4]

Note: สังเกตุเครื่องหมาย & หน้า ตัวแปร prc
เป็นการบอกว่า pass ค่า block นะ ไม่ใช่ argument

น่าจะพอสรุปได้ว่า ruby block กับ
python lambda เป็นเรื่อง concept เดียวกัน
เพียงแต่ ruby ปรับปรุง syntax ให้สามารถ
pass block (lambda) ได้ง่ายกว่า

Note: แฟนผมเดินเข้ามาแอบอ่าน post นี้
ดูสักพัก แล้วก็เดินส่ายหัวจากไปพร้อมกับเสียงงืมงัม python ruby ruby python ...
(ช่วงนี้ผมเขียน post บ่อย แกกลัวว่าจะแอบ chat
กับสาวๆ)

Related link from Roti

2 comments:

Mk said...

ขอบคุณครับ

Ruby นี่เป็นชื่อผู้หญิงได้นะครับ ถ้าเป็น Ruby Pe(a)rl อะไรทำนองนี้ค่อยน่าสงสัยหน่อย เผอิญมี Python มันเลยรู้ว่าไม่ใช่แน่

rpgkan said...

ยังอุตสาห์คิดเป็นชื่อผู้หญิงได้นะเนี่ย กรำ

แต่ยังไง python ก็เน้นอ่านง่ายกว่าอะ เหอ ๆ
แอบเชียร์