Computer >> Máy Tính >  >> Lập trình >> Ruby

Cách sử dụng Heredoc trong Ruby

Heredoc là gì?

Một heredoc là một cách để xác định một chuỗi nhiều dòng, trong khi duy trì thụt lề và định dạng ban đầu .

Điều này được sử dụng để nhúng các đoạn mã, như SQL hoặc HTML.

Đây là một ví dụ :

query = <<-SQL
SELECT * FROM food
WHERE healthy = true
SQL

Bạn sử dụng cú pháp này để xác định heredoc trong Ruby.

Bạn bắt đầu bằng ký hiệu <<- , sau đó là một từ đại diện cho tên của heredoc này, sau đó là nội dung của heredoc, sau đó bạn đóng heredoc bằng một số từ trên dòng riêng của nó.

Một cách khác để thực hiện việc này là sử dụng% Q :

query = %Q(

  Article about heredocs

)

Bạn sẽ nhận được thêm một dòng mới ở đầu và cuối của chuỗi này. Một heredoc (hoặc gọi dải strip method) giải quyết điều đó.

Đây là heredoc của Ruby không có dòng mới :

query = <<-HTML.chomp

  Article about heredocs

HTML

Nội suy Ruby Heredoc

Nếu bạn đang tự hỏi liệu bạn có thể sử dụng phép nội suy chuỗi với heredoc ...

Câu trả lời là có!

Ví dụ :

type  = "healthy"
table = "food"

query = <<-SQL
SELECT * FROM #{table}
WHERE #{type} = true
SQL

Bạn có thể vô hiệu hóa nội suy bằng cách bao quanh tên heredoc bằng các dấu ngoặc kép.

Như thế này :

doc = <<-'TIME'
Current time is #{Time.now}
TIME

Ruby Squiggly Heredoc

Làm cách nào bạn có thể loại bỏ thụt lề thừa ở đầu mỗi dòng?

Đó là những gì heredoc nguệch ngoạc dành cho.

Được giới thiệu trong Ruby 2.3, heredoc nguệch ngoạc loại bỏ thụt lề thừa cho bạn.

Ví dụ :

page = <<-HTML
  Heredocs are cool & useful
HTML

# "  Heredocs are cool & useful\n"

page = <<~HTML
  Heredocs are cool & useful
HTML

# "Heredocs are cool & useful\n"

page = <<~HTML.strip
  Heredocs are cool & useful
HTML

# "Heredocs are cool & useful"

Giờ đây, bạn có thể giữ thêm khoảng trống để dễ đọc.

Trong khi loại bỏ chúng trong chuỗi thực tế!

Tóm tắt

Bạn đã học cách sử dụng heredocs trong Ruby để nhúng các chuỗi nhiều dòng vào mã của mình. Điều này có thể hữu ích cho việc viết các bài kiểm tra cho mã của bạn hoặc có sẵn các bit dữ liệu nhỏ mà không cần phải đọc tệp.

Cảm ơn vì đã đọc!