2016-06-02 14 views
5

Mục tiêu chính của tôi là có thể hiểu được thư viện/viên ngọc mà tôi đang sử dụng, đầy đủ. Tôi đã thử đọc mã nguồn từ đầu đến cuối trên Github nhưng nó thực sự rất khó.Điều hướng mã nguồn Ruby

Tôi nghĩ một bước đệm thú vị và nhẹ nhàng hơn sẽ chỉ là đọc mã nguồn của mỗi thư viện/phương pháp đá quý khi tôi sử dụng nó.

Ví dụ tôi muốn biết làm thế nào redirect_to phương pháp trong Ruby on Rails hoạt động:

  1. Làm thế nào tôi có thể tra cứu mã nguồn cho các phương pháp redirect_to?
    • Tôi biết rằng trong quá trình nâng cấp, tôi có thể làm điều gì đó như show-method method, nhưng làm cách nào tôi có thể thực hiện việc này cho các phương pháp trong khung Rails?
  2. Bạn có bất kỳ đề xuất nào về cách tôi có thể hiểu rõ hơn về đá quý và API của chúng không? Chỉ cần đọc mã nguồn có vẻ thực sự khó khăn, đặc biệt là cho các khung công tác.

Cảm ơn bạn!

+1

"làm cách nào tôi có thể làm điều này cho các phương pháp trong khung đường ray" - chính xác theo cùng một cách. Phương pháp là phương pháp. –

+0

Xin lỗi, tôi không hiểu câu trả lời của bạn hoàn toàn, bạn có gợi ý tôi làm điều này 'chuyển hướng phương thức hiển thị_to' chẳng hạn? Nếu vậy tôi không chắc chắn làm thế nào tôi sẽ đi về tải các mô-đun cần thiết vào phiên pry. –

+0

"làm thế nào tôi sẽ đi về tải các mô-đun cần thiết" - chỉ cần làm điều đó trong một giao diện điều khiển đường ray. Đặt một breakpoint ('binding.pry') ở đâu đó trong controller, nhấn nó (bằng cách truy cập url tương ứng trong trình duyệt của bạn) và sau đó làm' show-source redirect_to'. –

Trả lời

4

Các RubyMine IDE đáp ứng nhu cầu này cho tôi. Nó có những tính năng mà rất nhiều làm giảm rào cản đối với việc đọc nguồn đá quý:

  • Gems là một phần của dự án cây (trong thư viện bên ngoài giả thư mục), vì vậy bạn có thể điều hướng và thậm chí chỉnh sửa chúng giống như bạn mã của riêng bạn.

  • Lệnh khóa đơn (lệnh B trên máy Mac) điều hướng từ mã định danh (tên mô-đun, tên phương thức, v.v.) đến khai báo hoặc đưa ra danh sách để chọn nếu có nhiều khai báo.Nó hoạt động cho cả mã và mã đá quý của bạn.

  • Một lệnh khác (tùy chọn-lệnh-O trên máy Mac) cho phép bạn nhập tên số nhận dạng để điều hướng đến như trên. Nó tự động bao gồm mã thư viện nếu những gì bạn nhập không được tìm thấy trong mã của bạn; nếu những gì bạn nhập được tìm thấy trong mã của bạn, bạn có thể nhấn phím một lần nữa để bao gồm mã đá quý.

  • Trình gỡ lỗi liên tục hiển thị mã bạn đang thực thi. Bạn có thể đặt điểm ngắt mà không cần chỉnh sửa mã nơi bạn muốn. Bạn có thể kiểm tra bất kỳ khung ngăn xếp nào phía trên khung đang thực sự thực thi. Tất cả các tính năng này hoạt động tốt với mã và mã đá quý của bạn.

Nói chung các tính năng RubyMine đều hoạt động với mã đá quý cũng như mã dự án.

Về phương pháp hiểu đá quý khác ngoài việc đọc mã nguồn: Hầu hết các đá quý được ghi trong README (tôi luôn đọc trên Github) và các tệp tài liệu khác trong thư mục gốc của gem hoặc trong thư mục doc. Một số đá quý (đá quý Rails bao gồm) có rdoc đó là giá trị đọc. Tuy nhiên, vì nó thuận tiện để điều hướng từ việc sử dụng một viên ngọc đến mã của nó, tôi thường cố gắng đầu tiên, và đọc rdoc (nếu có) trong mã trước khi tôi đọc mã thực. RubyMine cũng có thể hiển thị rdoc cho một định danh mà nó được sử dụng (F1 trên máy Mac), nhưng tôi đã luôn tìm thấy nó dễ dàng hơn để chỉ cần đi thẳng vào mã.

+0

Âm thanh tuyệt vời, tôi nhớ các tính năng như thế khi tôi đang sử dụng RubyMine IDE nhưng tiếc là nó được trả tiền, và một học sinh bỏ học đại học như tôi không thể đủ khả năng như vậy ngay bây giờ ... –

+0

Tôi nghĩ nó đáng giá nếu bạn ' tái chi tiêu thời gian đáng kể lập trình. Tuy nhiên, cách sử dụng nó miễn phí bao gồm bản dùng thử miễn phí, [giấy phép nguồn mở] (https: //www.jetbrains.com/buy/opensource /) và giành được giấy phép trong nhóm người dùng/cuộc gặp gỡ hội ngộ, mà tôi đã thực hiện ba lần! –

+0

ahah Tôi sẽ có một cái nhìn sau đó. Và cảm ơn cho những lời khuyên với IDE tôi chắc chắn sẽ xem lại điều này nếu tôi đã bao giờ nhận được một IDE. –

2

Cách tiếp cận đầu tiên của tôi khi cố gắng học cách sử dụng đá quý là viết các bài kiểm tra chống lại nó.

Robert C. Martin viết:

Học mã của bên thứ ba là khó khăn. Việc tích hợp mã của bên thứ ba cũng khó. Làm cả hai cùng một lúc là gấp đôi khó khăn. Nếu chúng ta có cách tiếp cận khác thì sao? Thay vì thử nghiệm và thử các công cụ mới trong mã sản xuất của chúng tôi, chúng tôi có thể viết một số thử nghiệm để khám phá sự hiểu biết của chúng tôi về mã của bên thứ ba. Jim Newkirk gọi các cuộc kiểm tra như vậy các bài kiểm tra học tập.

Trong các bài kiểm tra học tập, chúng tôi gọi API của bên thứ ba, như chúng tôi hy vọng sẽ sử dụng nó trong ứng dụng của chúng tôi. Về cơ bản, chúng tôi đang thực hiện các thử nghiệm được kiểm soát để kiểm tra hiểu biết của chúng tôi về API đó. Các bài kiểm tra tập trung vào những gì chúng tôi muốn ra khỏi API.

Đọc mã nguồn sau, khi bạn thực sự quan tâm đến cách thức hoạt động của nội bộ.

Hy vọng điều này sẽ hữu ích!

Đối với nơi redirect_to được định nghĩa trong ActionController :: Chuyển hướng

https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/actionpack/lib/action_controller/metal/redirecting.rb

+0

Tôi thấy cảm ơn vì ý tưởng này! Tôi đánh giá cao bạn cho tôi một câu trả lời trực tiếp nhưng có một cách có phương pháp trong việc tìm kiếm mã nguồn cho các phương pháp? –

+0

Than ôi, tôi không có cách nào có phương pháp. – floum

2

Nếu bạn có thể nhận được mã vào một bộ điều khiển này thường là thông tin mới hơn:

raise method(:redirect_to).source_location.inspect 

Điều đó sẽ cho bạn thấy chính xác nơi phương pháp đã được xác định.

Khi làm việc với lớn mã căn cứ như thế này tôi thường dựa vào git khá khó khăn:

git grep 'def redirect_to' 

Nếu đó lần lượt lên gì:

git grep 'redirect_to' 

Bạn có thể cần phải lọc kỹ lưỡng hơn nhưng thường việc triển khai nổi bật trực quan.

Điều tuyệt vời về mã Ruby là thường là khá dễ đọc và tìm kiếm thông qua nó thường dễ chịu hơn các ngôn ngữ khác.

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