2011-12-24 24 views
6

Tôi đã tìm kiếm và tìm kiếm.Làm thế nào để tìm kiếm một chuỗi bên trong một lớp trong Squeak smalltalk? Làm thế nào về bên trong một gói?

tôi đến IRC

Hy vọng câu hỏi là không ngớ ngẩn. Nếu đúng, chuỗi bên phải để tìm kiếm tại google vẫn sẽ được đánh giá cao

+0

Tôi biết về tệpOut. Nhưng phải có cách tốt hơn – josinalvo

+0

Không phải là câu trả lời thực tế, nhưng hãy xem http://squeak.preeminent.org/tut2007/html/035B.html để đề xuất của mình để lại nhận xét cho chính mình để xem lại các phương pháp cụ thể dưới dạng thực tế các cuộc gọi phương thức mà bạn có thể dễ dàng tìm thấy bằng cách tìm kiếm những người gửi đó. –

Trả lời

1

Dưới đây là ví dụ cho bạn thấy tất cả các phương pháp trong DosFileDirectory chứa chuỗi '\'.

aString := '\\'. 
class := DosFileDirectory. 
methodsContainingString := class methodDictionary values select: [:method | 
    method hasLiteralSuchThat: [:lit | 
     (lit isString and: [lit isSymbol not]) and: 
      [lit = aString]]]. 
messageList := methodsContainingString collect: [ :e | MethodReference new setStandardClass: class methodSymbol: e selector ]. 

SystemNavigation new 
    browseMessageList: messageList 
    name: 'methods containing string'. 

Để tìm kiếm một gói toàn bộ, quấn phần tìm kiếm trong:

package := PackageOrganizer default packageNamed: packageName ifAbsent: [ self error: 'package doesn't exist' ]. 
package classesAndMetaClasses do: [ :class | ... ] 
2

trả lời câu hỏi như vậy với động cơ refactoring là khá dễ dàng. Mã sau tìm thấy tất cả các lần xuất hiện của / trong hệ thống:

allCodeWithSlash := RBBrowserEnvironment new matches: '/' 

Từ đó bạn có thể tìm hiểu phạm vi tìm kiếm, ví dụ: vào trong một lớp:

allCodeWithSlashInClass := allCodeWithSlash forClasses: (Array with: DosFileDirectory) 

Hoặc bên trong một gói:

allCodeWithSlashInPackage := allCodeWithSlash forPackageNames: (Array with: 'Files') 

Nếu bạn có một giao diện người dùng được nạp, bạn có thể mở trình duyệt trên bất kỳ của các kết quả tìm kiếm:

allCodeWithSlashInPackage open 

Nếu bạn sử dụng OmniBrowser, bạn cũng có thể tạo và điều hướng các phạm vi này mà không cần nhập bất kỳ mã nào thông qua trình đơn Tái cấu trúc phạm vi.

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