2013-06-25 13 views
6

Giả sử tôi có một hàm gọi là bla được định nghĩa ở đâu đó trong ứng dụng đường ray của tôi.Có cách nào để xem (hoặc in) một định nghĩa phương pháp có lập trình trong đường ray không?

Có cách nào trong ruby ​​hoặc đường ray qua đó tôi có thể in mã được sử dụng động/lập trình để xác định hàm đó không? Vì vậy, ví dụ:

def bla 
    puts "Hi There" 
end 

và sau đó nếu tôi gọi một chức năng như thế nào, ví dụ, get_definition:

puts get_definition(:bla) 

này sẽ in ra

"puts \"Hi There\"" 

Có cách nào kinh điển làm điều này ? Tôi đã không thực sự cần phải làm điều này trước đây, và tôi biết đây không phải là thực tế phổ biến trong đường ray.

Tôi cũng không muốn xác định phương pháp của mình bằng cách sử dụng lập trình meta (phản chiếu) và sau đó lưu trữ chuỗi được sử dụng để xác định phương thức của tôi. Bất kỳ trợ giúp được đánh giá cao!

+0

http://stackoverflow.com/a/11544229/1004274 – oldergod

+0

Bản sao của http://stackoverflow.com/questions/3220623/meta-programming-output-method-body-as-text –

+0

Điểm tốt, có vẻ như một bản sao của cả hai câu hỏi (lạ, vì những câu hỏi này trùng lặp nhau) ... không ai trong số đó thực sự trả lời câu hỏi của tôi và không ai trong số họ có thể tìm thấy trên google khi tìm kiếm 'lập trình' hoặc tôi đã tìm thấy cả hai. Nhưng một bản sao trùng lặp là –

Trả lời

1

Tôi không biết John Hyland đang viết về cái gì. Không có phương thức như vậy (trong Ruby thuần túy) là Method#source. Giải pháp thực tế là sử dụng pry gem. Nó có phương pháp để cho phép bạn truy cập nguồn.

+1

Không chắc ai đã bỏ phiếu bình chọn cho bạn, nhưng tôi cũng sẽ cố gắng sử dụng đá quý. @ John-Hyland thực sự có một điểm tốt, phương thức .source_location hoạt động trên phiên bản 1.9.2. Tôi chưa thử nghiệm phương thức .source trong 1.9.3 –

+0

@CosminAtanasiu Có, 'Phương thứC# source_location' tồn tại trong một thời gian dài. Như tôi đã viết, không có phương thức nào như 'Method # source'. Tôi đã sử dụng 1.9.2 cũng như 1.9.3 và không có phương pháp như vậy. Bây giờ, tôi sử dụng 2.0, và không có phương pháp như vậy. – sawa

+0

Tôi sẽ xem xét nó trong vài ngày tới để xem –