2011-12-24 16 views
6

He buscado y buscado.¿Cómo buscar una cadena dentro de una clase en Squeak smalltalk? ¿Qué tal dentro de un paquete?

Fui a IRC

Esperamos que la pregunta no es tonta. Si lo fuera, la cadena derecha para buscar en google aún sería muy apreciada

+0

Sé de fileOut. Pero tiene que haber una forma mejor – josinalvo

+0

No es una respuesta real, pero vea http://squeak.preeminent.org/tut2007/html/035B.html por su sugerencia de dejar comentarios a usted mismo para volver a visitar métodos particulares en la forma de real llamadas a métodos que puede encontrar fácilmente buscando a esos remitentes. –

Respuesta

1

Aquí hay un ejemplo que muestra todos los métodos en DosFileDirectory que contienen la cadena '\'.

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'. 

Para buscar un paquete completo, envuelva la parte de búsqueda en:

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

responder a estas preguntas con el motor refactorización es bastante fácil. El código siguiente busca todas las apariciones de / en el sistema:

allCodeWithSlash := RBBrowserEnvironment new matches: '/' 

Desde allí se puede ampliar el alcance de la búsqueda, por ejemplo, a dentro de una clase:

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

o dentro de un paquete:

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

Si ha cargado una interfaz de usuario, puede abrir un navegador en cualquiera de estos resultados de búsqueda:

allCodeWithSlashInPackage open 

Si usa OmniBrowser, también puede compilar y navegar estos ámbitos sin escribir ningún código a través del menú Refactoring scope.

Cuestiones relacionadas