0

Ruby + MySQL จาก Macports

ผมใช้ ruby จาก rvm ไม่ได้ลงจาก macports ( อาจจะไม่เกี่ยวอะไรเลย ) แล้วก็ gem install ruby-mysql

ทีนี้ใน code ผมเขียนประมาณว่า


db = Mysql.connect('localhost', 'root', 'mypass', 'mydb')

แค่นี้เองพอ run แล้วเจ๊งเลยขึ้นแบบนี้ … gems/ruby-mysql-2.9.13/lib/mysql/protocol.rb:150: in`initialize': No such file or directory – connect(2) for “/tmp/mysql.sock” (Errno::ENOENT)

แต่อันนี้ก็ทำนองว่าเจอบ่อยแล้ว mysql ที่ลงจาก macports ไม่ได้ใช้ไฟล์นั้นผมก็เลยลองเข้าไปดูไฟล์ protocol.rb ก็มีท่าแก้แบบนี้

MYSQL_UNIX_PORT=/opt/local/var/run/mysql5/mysqld.sock ruby my_prog.rb

ใช้ได้เลย

0

Ruby – return

เรื่องหนึ่งอาจจะยากที่สุดเวลาเขียน Ruby สำหรับคนที่เขียน Java มาก่อนอาจจะเป็นเรื่อง return

ผมว่าดูตัวอย่างพวกนี้แล้วก็จะเข้าใจได้ไม่ยาก

เหมือนกัน


def func1
  return 10
end

def func1
  10
end

ไม่แน่ใจว่าเหมือนกันไหมแต่ return ค่าเดียวกัน


def func2 a
  if a > 100
    return 10
  else
    return 20
  end
end

def func2 a
  if a > 100
    10
  else
    20
  end
end

แต่ถ้ามันมีหลาย ๆ คำสั่ง มันก็จะเอาคำสั่งสุดท้าย แบบข้างล่างนี่ก็จะได้ผลเหมือนกัน

def func3
  func4(10)
  return func5(20)
end

def func3 a
  func4(10)
  func5(20)
end

มีคนถามว่าแล้วจะมี return ไปทำไม มีคนตอบว่ามันทำให้ function หยุดตรงกลางได้ เช่น

แบบข้างล่างถ้า a = 101 มันก็จะ return 20 แล้วก็ไม่ไปทำ puts ข้างล่าง

def func6 a
  if a > 100
    return 20
  end
  puts 30
  puts 40
  50
end

ปกติแล้วเวลาเขียน Ruby เราต้องติดเสมอว่าจะ return อะไร

… ถ้ามั่วก็ขออภัย

ป.ล. ท่าพวกนี้ Ruby น่าจะได้มาจาก Scheme แต Scheme จะเขียนหลาย ๆ คำสั่งต่อกันเลยไม่ได้ ต้องมีบางทีต้องไปอยู่ใน (begin ) … แต่ช่างเถอะ :-P

0

ผมเขียน Ruby แล้วติดว่า JSON parser มันช้า วิธีแก้คือใช้ yajl-ruby