Ruby: Introducing Super-Each
October 28th, 2006
Eine möglicherweise halbwegs sinnvolle Anwendung für den Proxy den ich hier vorgestellt habe.
Es wurmt mich manchmal, für das Aufrufen einer einzigen Methode in einem Enumerable dieses hässliche Klammerkonstrukt bemühen zu müssen:
Array#each{ |o| o.method }
Das geplante Symbol#to_proc sieht auch nicht viel besser aus:
%w[dsf fgdg fg].map(&:capitalize) # => ["Dsf", "Fgdg", "Fg"]
Die Lösung:
module Eachable
class EachWrapper
instance_methods.each do |m|
undef_method m unless m =~ /(^__|^nil\?|^send)/
end
def initialize(args)
@target = args
end
def method_missing (method, *args, &block)
@target.each do |elem|
elem.send(method, *args, &block)
end
end
end
def supereach (*args, &block)
if block_given?
self.each(*args, &block)
else
return EachWrapper.new(self)
end
end
end
class Array
include Eachable
end
chars = %w(a b c d)
chars.supereach.upcase!
puts chars.inspect # => ["A", "B", "C", "D"]
Viel schöner.
Problem: das sollte nicht supereach, sondern each heissen. Das wird im moment noch verhindert:
- die Implementierung verwendet selbst
each - die Art wie Ruby das
include Eachableverarbeitet, verhindert dassArray#eachüberschrieben wird.
Morgen, wenn meine Augen nicht mehr so schmerzen, finde ich eine Lösung.
PG500: Intuitive Visualisierung und interaktive Auswertung von Paretomengen
October 16th, 2006
Das klingt beeindruckend und ist die offizielle Bezeichnung der Projektgruppe die mich dieses und nächstes Semester beschäftigen wird.
Bei dem Projekt geht es darum, Methoden und Implementierungen zu entwickeln, die es Ingenieuren aus dem Maschinenbau erleichtern, Lösungsmengen heuristischer Algorithmen interaktiv zu untersuchen. Der Witz dabei ist, dass der Lösungsraum wesentlich mehr als 3 Dimensionen haben kann. Aufgabe der Projektgruppe ist es, sich zu überlegen, wie man einen solchen hochdimensionalen Lösungsraum vernünftig navigieren und betrachten kann und eine Implementierung dafür zu entwickeln.
Letzte Woche hatten wir unsere erste Zusammenkunft, eine zweitägige Seminarfahrt in der wir 11 uns gegenseitig über unsere jeweiligen Spezialgebiete informiert haben. Darüberhinaus war die gemeinsame Fahrt natürlich auch “teambildende Maßnahme”, allerdings hätte es einer solchen kaum bedurft: Ich denke dass wir da eine sehr gute Truppe zusammenbekommen haben.
Ich bin gespannt was die nächsten 2 Semester bringen werden.