2015-02-09 15 views
6

Có cách nào để nhận xét các phương thức được xác định bằng define_method trong YardDoc không?Tài liệu sân và `define_method`

Tôi cố gắng này:

%w(one two three).each do |type| 
    # The #{type} way 
    # @return [String] the #{type} way 
    define_method("#{type}_way") do ... end 
end 

Nhưng, không may, không phải làm việc.

+0

Mô tả những gì "không làm việc" nghĩa là gì. Bạn không nhận được đầu ra? Bạn nhận được đầu ra nhưng nó không được định dạng? Nó được định dạng nhưng nó không phải là định dạng bạn muốn? –

+0

Không có gì xuất hiện: không có phương pháp và không có tài liệu nào cho các phương thức này – JoJoS

+0

Bạn không thể tạo tài liệu cho phương thức được tạo động, nó phải được định nghĩa tĩnh. Yard sẽ phải chạy mã của bạn sau đó sử dụng nội tâm để tạo ra các phương thức có sẵn trong thời gian chạy, điều này không thực tế. –

Trả lời

6

Nếu bạn di chuyển tạo ra phương pháp thành một phương pháp học, bạn có thể sử dụng một macro:

class Foo 

    # @!macro [attach] generate 
    # @method $1_way 
    # The $1 way 
    # @return [String] the $1 way 
    def self.generate(type) 
    define_method("#{type}_way") do 
    end 
    end 

    generate :one 
    generate :two 
    generate :three 

end 

YARD Output:

- (String) one_way 

Một cách

Returns:

(String) - một trong những cách


- (String) three_way 

Ba cách

Returns:

(String) - ba cách


- (String) two_way 
.210

Hai cách

Returns:

(String) - hai cách

+0

tại sao nó không hoạt động trong một vòng lặp? '[: một,: hai,: ba] .each {| n | generate (n)} '. Phải không? – masciugo

+2

@masciugo vì YARD không thực thi mã. – Stefan

+0

OK @Stefan nhưng .. trong các trường hợp như thế này, chúng ta có thực sự phải điều chỉnh mã để sử dụng YARD không? Tôi có nghĩa là có thể ít hơn có thể đọc được mã trong lợi của sản xuất tự động doc ... hoặc là có một số cách khác để tài liệu phương pháp được tự động xác định? – masciugo

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