2015-05-23 14 views
7

Tôi có một phương pháp mà nên tận 1+ thông số của bất kỳ lớp, tương tự như Array#push:Cách tốt nhất để ghi lại thông số "splatted" với YARD?

def my_push(*objects) 
    raise ArgumentError, 'Needs 1+ arguments' if objects.empty? 
    objects.each do |obj| 
    puts "An object was pushed: #{obj.inspect}" 
    @my_array.push obj 
    end 
end 

cách tốt nhất để ghi lại các thông số phương pháp sử dụng cú pháp YARD là gì?

Edit:

Tôi nhận ra rằng câu hỏi ban đầu của tôi là một chút quá mơ hồ và không khá rõ những gì tôi đang tìm kiếm.

Câu hỏi hay hơn là, cách tốt nhất để xác định tính chất của phương pháp (1-∞ trong trường hợp này) trong YARD khi sử dụng thông số được chia nhỏ là gì? Tôi biết tôi chỉ có thể chỉ định nó trong văn bản, nhưng nó có vẻ như có nên là một thẻ hoặc một cái gì đó tương tự như xác định sự tinh thần.

Trả lời

7

Tác giả của YARD, lsegal, tuyên bố rằng the appropriate thing to do is provide an @overload for expected invocations. Tuy nhiên, điều này thực sự không cung cấp nhiều sự rõ ràng trong trường hợp phương thức giống như Array#push.

Tôi khuyên bạn nên sử dụng thẻ @param và sử dụng Array<Object> làm loại đối số hoặc cung cấp @overload trông đẹp mắt.

Dưới đây là một so sánh của hai:

class Test 
    # A test method 
    # 
    # @param [Array<Object>] *args Any number of Objects to push into this collection 
    # @return nil 
    def push(*args); end 

    # Another test method 
    # 
    # @overload push2(obj, ...) 
    # @param [Object] obj An Object to push 
    # @param [Object] ... More Objects 
    def push2(*args); end 
end 
+3

tôi cập nhật câu hỏi của tôi là cụ thể hơn một chút. Vấn đề duy nhất với 'Array ' là nó ngụ ý rằng một danh sách rỗng của params là chấp nhận được. '@ overload' có vẻ như nó là nhiều hơn cho việc xác định các lời gọi phương thức khác nhau có các kiểu tham số khác nhau. – hololeap

+1

Tôi vẫn nghĩ rằng 'overload' sẽ là thẻ thích hợp nhất (và có sẵn), đặc biệt vì không có lý do _technical_ mà phương thức không thể chấp nhận một danh sách trống (từ một phối cảnh định nghĩa phương thức) - tài liệu cho nó trông rất phù hợp : http://www.rubydoc.info/gems/yard/file/docs/Tags.md#overload. Điều gì sẽ xảy ra nếu bạn thay đổi định nghĩa phương thức thành 'my_push (first_object, * more_objects)' và sau đó kết hợp và làm phẳng chúng. Không đẹp lắm, tôi thừa nhận, nhưng có được tinh thần thi hành ... – davemyron

+0

Vấn đề tôi thấy với '@param [Array]' là splat kết thúc một đối số Array không được chia nhỏ thành một Array: 'def push3 (* args) ; args.inspect kết thúc; push3 ([]) # => [[]] ' *** Chỉnh sửa **: Tôi hoàn toàn không thuyết phục SO định dạng khối nhận xét nhiều dòng * – carp

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