Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: CachingHash-Pattern
BeitragVerfasst: 01 Okt 2010, 15:56 
Offline
Interpreter
Benutzeravatar

Registriert: 21 Mai 2007, 11:30
Beiträge: 1283
Wohnort: Thüringen
Ich hab bei Metaprogrammierung allerdings auch meistens eval verwendet, eben aus diesem Grund =/ Das Problem ist halt, das define_method Zugriff auf lokale Variablen in der Umgebung hat und damit eben mehr ist als nur eine Methode. Das könnte man wohl nur lösen, in dem man vorher prüft ob die Methode auch Gebrauch von lokalen Variablen macht, die den Methodenscope über einen anderen Proc verlassen oder die nach der Definition der Methode noch geändert werden.

Zitat:
Die Leute kennen sich mit RubyHashs genauso gut aus, wie sie sich in Java mit dem Unterschied zwischen einer ArrayList und einer LinkedList auskennen.
Theoretische Laufzeiten hin oder her, ich hab noch nie erlebt das 'ne LinkedList 'ne bessere Performance als 'ne ArrayList hat, selbst wenn ich unzählige Einfüge- und Löschoperationen ausführe =/

Zitat:
Ich sehe da nur das Problem, dass die Überfrachtung der Hash-Klasse mit Funktionalität dazu führt, dass andere, eventuell besser geeignete Klassen lieber beiseite geschoben werden.
Das ist aber eine generelle Strategie in Ruby. Es gibt eine Implementation für viele Datenstrukturen. Der Rubyarray ist sogleich Stack, Liste, Set, Array und Queue gemeinsam. Der Rubyhash übernimmt Aufgaben von Maps und Sets. Ich finde das auch nicht gerade sauber, aber es wohl für AdHoc-Programme recht zweckmäßig, wenn man sich keine Gedanken um die Datenstrukturen machen muss. Lieber wäre es mir allerdings gewesen, man macht mehr Gebrauch von dem mächtigen Werkzeug der Mixins, mit dem man Problemlos Implementation und Datenstruktur beliebig hätte kombinieren können.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: CachingHash-Pattern
BeitragVerfasst: 02 Okt 2010, 01:36 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
Mir ging es einfach nur darum, den typischen Anwendungsfall für Hash#new zu vereinfachen. Es ist auf jeden Fall schneller zu tippen ;)

Die Idee mit dem überladenen new könnte man so umsetzen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class << Hash
alias classic_new new
def new(*args, &block)
if block && block.arity == 1
classic_new(*args) do |hash, key|
hash[key] = block[key]
end
else
classic_new(*args, &block)
end
end
end

double = Hash.new do |a|
puts "calculating double of #{a}"
a * 2
end

double[1] # => 2
# >> calculating double of 1
double[2] # => 4
# >> calculating double of 2
double[1] # => 2


Zitat:
Lieber wäre es mir allerdings gewesen, man macht mehr Gebrauch von dem mächtigen Werkzeug der Mixins, mit dem man Problemlos Implementation und Datenstruktur beliebig hätte kombinieren können.
Sicher, dass das funktioniert? Gibt es eine Sprache, die das beherrscht? Sollte man solche Details nicht dem Compiler oder der entsprechenden Bibliothek überlassen?

Mal ehrlich: Details wie die Implementation von Listen und Maps vor dem Programmierer zu verstecken ist auch nicht viel anders, als ihm die direkte Kontrolle über die Speicherverwaltung zu nehmen. Das heißt, eine große Erleichterung.

Mir persönlich sind ja schon tuple vs. list in Python zu viel ;)

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: