Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Làm chủ Heredoc trong Ruby: Hướng dẫn thực tế cho chuỗi đa dòng

Heredoc là gì?

Heredoc là cách định nghĩa chuỗi đa dòng (multiline string), trong khi giữ nguyên indent & format gốc.

Điều này dùng để nhúng đoạn code, như SQL hoặc HTML.

Ví dụ:

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

Bạn dùng cú pháp này để định nghĩa heredoc trong Ruby.

Bạn bắt đầu với ký hiệu <<-, sau đó là từ đại diện cho tên heredoc này, rồi nội dung heredoc, rồi đóng heredoc với từ đó trên dòng riêng.

Cách khác là dùng %Q:

query = %Q(
  Article about heredocs
)

Bạn sẽ nhận được newline thừa ở đầu & cuối chuỗi này. Heredoc (hoặc gọi phương thức strip) giải quyết điều đó.

Đây là Ruby heredoc không có trailing newline:

query = <<-HTML.chomp
Article about heredocs
HTML

Interpolation trong Ruby Heredoc

Nếu bạn thắc mắc có thể dùng string interpolation với heredoc không…

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ể tắt interpolation bằng cách bao quanh tên heredoc với single quotes.

Như thế này:

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

Ruby Squiggly Heredoc (Heredoc xoắn)

Làm thế nào để bỏ indent thừa ở đầu mỗi dòng?

Đó là việc của squiggly heredoc (heredoc xoắn).

Được giới thiệu trong Ruby 2.3, squiggly heredoc loại bỏ indent 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"

Bây giờ bạn có thể giữ khoảng trắng thừa cho dễ đọc.

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

Tóm tắt

Bạn đã học cách dùng heredoc trong Ruby cho việc nhúng chuỗi đa dòng trong code. Điều này có thể hữu ích cho việc viết test cho code hoặc có sẵn các đoạn dữ liệu nhỏ mà không phải đọc file.

Cảm ơn bạn đã đọc!