2013-09-30 13 views
6

Tại sao tôi có thể làmcủa Ruby dòng lệnh một lớp lót phụ vs quét

ruby -pe "sub /.*{((\d+\.){3}).*/, '\115'" < file.txt 

nhưng nếu tôi cố gắng scan thay vì sub tôi nhận được

-e: 1: trong <main>': undefined method quét' cho chính: Object (NoMethodError)

Đây là khó hiểu từ sub không phải là một phương pháp trên Object một trong hai.

Tôi cũng đã cố gắng nó theo cách Perl, một cái gì đó giống như

ruby -ne "/.*/; puts $1" <file.txt 

nhưng điều đó không bay.

Tôi có thể tìm tài liệu về vấn đề này ở đâu?

+0

phụ là phương pháp dưới hạt nhân là một mô-đun bao gồm trong đối tượng do đó bạn nhận được nó dưới phạm vi của đối tượng chính, nơi quét không nếu bạn đang chạy trên ruby ​​2.0. Nếu bạn đang chạy 1.8.7 sau đó bạn gọi quét bằng cách làm $ _ quét (pattern) – Raghu

Trả lời

9

sub is a method on Kernel, một mô-đun có các phương pháp thể hiện có sẵn trên toàn cầu. Phiên bản này của phương thức hoạt động trên biến toàn cầu $_contains the string last read by gets.

Đây là phương pháp hoàn toàn khác so với String#sub, thực hiện quy trình tương tự nhưng với chuỗi rõ ràng là người nhận chứ không phải sử dụng ngầm định $_.

+0

Âm thanh rất thuyết phục nhưng tôi đã thử ´Kernel.methods.sort´ và ´Kernel.instance_methods.sort´ và tôi dường như không thể tìm ´sub´ ở bất cứ đâu. –

+0

Tôi cũng quan tâm đến việc biết cách bạn có kiến ​​thức này và tôi thực sự hy vọng rằng câu trả lời không phải là 'đọc nguồn'. –

+0

@ JonasElfström: chúng ở ngay trên tài liệu 'Kernel' ... – maerics

Các vấn đề liên quan