Ý nghĩa của ~>
yêu cầu phiên bản trong thông số kỹ thuật đá quý là gì?
hanna-0.1.12 phụ thuộc vào [haml (~> 2.2.8)]
Ý nghĩa của ~>
yêu cầu phiên bản trong thông số kỹ thuật đá quý là gì?
hanna-0.1.12 phụ thuộc vào [haml (~> 2.2.8)]
Câu trả lời:
Hướng dẫn sử dụng RubyGems gọi đây là một ràng buộc phiên bản bi quan .
Giả sử bạn đã chỉ định số phiên bản n phần, ví dụ 1.3
(2 phần) hoặc
3.5.6.2
(4 phần) làm ràng buộc. Sau đó, để đáp ứng ràng buộc, số phiên bản phải thỏa mãn cả hai điều kiện sau
N-1 phần đầu tiên của số phiên bản phải giống với n-1 phần đầu tiên của ràng buộc (ví dụ: 1.x
hoặc 3.5.6.x
khớp, nhưng 0.x
hoặc 3.5.7.x
không) và
Phần cuối cùng của số phiên bản phải lớn hơn hoặc bằng phần cuối cùng của ràng buộc (ví dụ 1.9999
và 3.5.6.2
khớp, nhưng 1.2
hoặc 3.5.6.1
không).
Nói cách khác
~> x 1 .x 2 .x 3 . … .X n-2 .x n-1 .x n
diêm
x 1 .x 2 .x 3 . … .X n-2 .x n-1 .y, y> = x n
Lý do điều này được gọi là ràng buộc "bi quan", và cũng là trường hợp sử dụng cho nó, là khi bạn vừa nói > x.y.z
, bạn đang lạc quan: bạn giả định rằng từ đây trở đi, cho đến muôn đời, API sẽ không bao giờ thay đổi. Tất nhiên đây là một giả định khá táo bạo. Tuy nhiên, hầu hết các dự án có quy tắc về việc khi nào họ được phép
phá vỡ khả năng tương thích ngược , và làm thế nào họ phải thay đổi số phiên bản của họ khi họ làm khả năng tương thích ngược nghỉ ngơi. Bạn có thể mã hóa các quy tắc đánh số phiên bản đó bằng cách sử dụng một ràng buộc bi quan và do đó bạn có thể chắc chắn rằng mã của mình sẽ luôn hoạt động (giả sử rằng tác giả của dự án khác thực sự tuân thủ các quy tắc của riêng mình, điều này rất tiếc là không phải lúc nào cũng vậy ).
Nói cách khác, bạn có thể sử dụng biểu tượng này để giữ cho viên ngọc của mình được cập nhật tất cả các bản cập nhật nhỏ và tránh thực hiện một bản cập nhật lớn có thể làm hỏng ứng dụng của bạn.
Ví dụ: "~> 1.2" sẽ cập nhật gem của bạn lên 1.3 (nếu phiên bản như vậy được phát hành) nhưng nó sẽ không cập nhật lên 2.0
Tôi nghĩ rằng tài liệu về gói tổng hợp tốt nhất là:
Từ bổ nghĩa ~> có ý nghĩa đặc biệt, được thể hiện rõ nhất bằng ví dụ. ~> 2.0.3 giống với> = 2.0.3 và <2.1. ~> 2.1 giống với> = 2.1 và <3.0. ~> 2.2.beta sẽ khớp với các phiên bản phát hành trước như 2.2.beta.12.
Nó phù hợp với bất kỳ phiên bản nào có cùng phần chính / phụ. Điều này có nghĩa là trong trường hợp này, haml ~> 2.2.8 sẽ khớp với bất kỳ phiên bản 2.2.x nào.
Điều này có thể được sử dụng để đảm bảo rằng một thay đổi phá vỡ API trong một viên ngọc mới, không dẫn đến việc phụ thuộc vào viên ngọc mới nhưng đã thay đổi đó sẽ phá vỡ hanna trong trường hợp này.
~> 2.0
và ~> 2.0.0
- các trận đấu trước đây 2.0, 2.1, 2.2.7 và mọi thứ khác cho đến (nhưng không bao gồm) 3.0. Cái sau phù hợp với 2.0, 2.0.1, 2.0.999 và mọi thứ khác lên đến (nhưng không bao gồm) 2.1.
~> 2.2.8
sẽ không khớp với "bất kỳ phiên bản 2.2.x nào" như câu trả lời tuyên bố, mà chỉ có phiên bản 2.2.x với x ≥ 8. IOW: câu trả lời tốt nhất là thậm chí còn chưa hoàn chỉnh, có nghĩa là không chính xác và chắc chắn gây hiểu lầm.