Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Here document trong Ruby 947

here document, ruby căn bản, string
akia.myopenid.com 6
Updated over 3 years ago

Trong Ruby, có kiểu định nghĩa chuỗi nhiều dòng rất hay, thường được gọi là “here document”.

1. Nếu bạn học Ruby rồi mà chưa biết về here document (hoặc giả sử biết rồi nhưng quên như sb) thì có thể bạn viết thế này:

str = "Một dòng chữ \n" +
"Một dòng khác \n" +
"Và một dòng nữa"

thì output sẽ là:

Một dòng chữ 
Một dòng khác
Và một dòng nữa

 

2. Nếu bạn đã dùng here document rồi hoặc sau khi đọc xong bài này, bạn sẽ không viết code như thế. Chắc chắn! Bạn sẽ viết thế này:

str = <<END_OF_STRING
Một dòng chữ
Một dòng khác
Và một dòng nữa
END_OF_STRING

Không phải hoa mắt vì đám double quote (“) và đống dấu cộng (+) mà vẫn hoàn toàn yên tâm rằng output không khác gì trên ^^


3. Advanced:

a. Chuỗi END_OF_STRING là do bạn chọn. Bạn có thể đặt là EOS, ABC, DEF, VAP, ... không sao hết. Chẳng hạn:

str = <<EOS
Một dòng chữ
Một dòng khác
Và một dòng nữa
EOS

b. Dynamic content

Xem ví dụ không hiểu chết liền:

name = 'Joe'
str = <<EOS
Tớ là #{name}
EOS

c. Indent

Trong các ví dụ trên tag đóng END_OF_STRING và EOS luôn luôn phải nằm đầu dòng, không được có khoảng trống ở bên trái, và như vậy sẽ rất bất tiện đối với bạn. Không sao, bạn có thể làm như sau:

str = <<-EOS
Một dòng chữ
Một dòng khác
Và một dòng nữa
EOS

Bạn nhìn kỹ sẽ thấy trước tag mở EOS có thêm dấu trừ (-)

Chúc vui vẻ với here document!

Bạn có thể xem thêm thông tin ở đây:

1 2 

Editors
phananhvu.myopenid.com 125
akia.myopenid.com 6

Comments

akia.myopenid.com 6
over 3 years ago
planet = ‘Earth’
string = <<end_of_string>
Hello, #{planet}
END_OF_STRING

Chỗ này có gì nhầm lẫn không ạ. Tag mở end_of_string> và tag đóng END_OF_STRING không trùng nhau, chắc sẽ có error.

Ngoài ra em ý kiến nên bổ sung thêm phần:

Indenting Documents:

Finally, if you need to indent the ending tag, then add a hyphen to the start tag. Without the hyphen you will get an error message stating the ending tag cannot be found before the end of the program (EOF).

string = <<-END_OF_STRING
Notice the hyphen after the
<< characters above
END_OF_STRING

http://ruby.about.com/od/learnruby/p/here_document.htm

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content