Mittwoch, 16.03.2005
Lisp steckt an
“Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.” – Eric S. Raymond
Da muss was dran sein. In meiner Studienarbeit habe ich gerade ein “dummes” Objekt in der Mache (praktisch nur Eigenschafts-Felder), das sich in einen Tab-getrennten String ausgeben soll, also einerseits die Feldnamen und andererseits die Werte. Woran ich ziemlich sofort dachte, war das hier (das Beispiel ist so gut wie korrektes Python1):
_fieldNames = ["Timestamp", "Location"]
def fieldNames(self):
return "\t".join(_fieldNames)
def fieldValues(self):
return map(lambda field: self.field, _fieldNames)
Das ist nix besonderes, ein total normales funktionales Idiom, das aber für mich den Nagel auf den Kopf zu trefen scheint – also frisch ans Werk. Das Projekt ist in Java, daher kommt am Ende trotz Jakarta Commons Beanutils und Collections leider eine gewisse Monstrosität auf:
private String[] _fieldNames = { "Timestamp", "Location" };
public String fieldNames() {
return ListUtils.joinList(getFieldNames(), "\t");
}
public String fieldValues() {
Collection fieldValues = CollectionUtils.collect(Arrays.asList(_fieldNames), new ReadFieldTransformer());
return ListUtils.joinList(fieldValues, "\t");
}
private class ReadFieldTransformer implements Transformer {
public Object transform (Object input) {
String name = (String) input;
name = name.substring(0, 1).toLowerCase() + name.substring(1);
try {
Object value = PropertyUtils.getProperty(Event.this, name);
return value.toString();
} catch (Exception e) {
// nyi: proper exception handling
throw new RuntimeException(e);
}
}
}
Aber trotzdem glaube ich, dass das eine der kürzesten generellen Formulierungen für das Problem ist.
1 Wie die richtige Inkantation aussieht, damit der
Feldzugriff self.field in der letzten Zeile wie gewünscht
funktioniert, übersteigt mein derzeitiges Python-Fu.
Antworten (6)
- Theuni:
- Theuni:
- Theuni:
- wosc:
- Theuni:
- wosc:
Die Diskussion ist geschlossen.
Atom 1.0
RSS 1.0
RSS 0.91