Verwendet jemand Tupel in Ruby? Wenn ja, wie kann man ein Tupel implementieren? Ruby-Hashes sind schön und funktionieren fast genauso gut, aber ich würde gerne etwas wie die Tuple-Klasse in Python sehen, wo Sie die .
-Notation verwenden können, um den Wert zu finden, nach dem Sie suchen. Ich möchte das, damit ich eine Implementierung von D, ähnlich Dee für Python erstellen kann.Verwenden von Tupel in Ruby?
Antwort
Kurz Beispiel:
require 'ostruct'
person = OpenStruct.new
person.name = "John Smith"
person.age = 70
person.pension = 300
puts person.name # -> "John Smith"
puts person.age # -> 70
puts person.address # -> nil
Das ist _exactly_ was ich gesucht habe. Vielen Dank! –
np :) um deine Frage zu beantworten: nein ich benutze keine Tupel in Ruby, als Openstruct oder sonst. Ich benutze Klassen am oberen Ende und Hashes am unteren Ende :) –
Dies ist eine schlechte Antwort, nur ein Link? Ernst? Was passiert, wenn die Verbindung unterbrochen wird? –
Basierend auf der Tatsache, dass Sie über Hashes sprechen und. Notation Ich gehe davon aus, dass Sie eine andere Art von Tupel als die (1. "a")
Art bedeuten. Sie suchen wahrscheinlich nach der Struct
Klasse. zB:
Person = Struct.new(:name, :age)
me = Person.new
me.name = "Guy"
me.age = 30
Das ist nahe, aber es zu benennen, nervt mich. Ich suchte nach etwas wie der (1. "a") Art, aber mit der Eigenschaft get/set Notation, die Sie beschreiben. –
@panesofglass, es gibt keine Notwendigkeit, nichts zu nennen: a = Struct.new (: Name,: Alter) .new; a.name = "Guy" – paradoja
Kann ich 'a = Struct.new (: name,: age)' setzen und später a.new sagen? Ich nehme es an. Ich muss das überprüfen. Es wäre viel expliziter, was ich will. –
Dies ist zwar nicht unbedingt ein Tupel (kann Punktnotation der Mitglieder nicht tun), können Sie eine Liste von Variablen aus einer Liste zuweisen können, die Probleme lösen wird oft mit rubin sein Pass-by -Wert, wenn Sie nach einer Liste von Rückgabewerten suchen.
z.
:linenum > (a,b,c) = [1,2,3]
:linenum > a
=> 1
:linenum > b
=> 2
:linenum > c
=> 3
Sie können mit Destrukturierung similiar etwas tun:
def something((a, b))
a + b
end
p something([1, 2])
Diese 3
ausdruckt, wie erwartet.
Ich bin der Autor von Gem for Ruby tuples.
Sie sind mit zwei Klassen zur Verfügung gestellt:
Tuple
im AllgemeinenPair
insbesondere
Sie können sie auf unterschiedliche Weise initialisieren:
Tuple.new(1, 2)
Tuple.new([1, 2])
Tuple(1, 2)
Tuple([1, 2])
Tuple[1, 2]
der beiden Klassen haben einige Hilfsmethoden:
length
/arity
- die Anzahl von Werten innerhalb Tupel gibt
first
/last
/second
(nur Paar) - die ein entsprechenden Elemente zurück[]
, dass Ihnen einen Zugriff auf ein bestimmtes Element gibt
Sie können die Scala Tupel mit diesem Trick verspotten:
Tuple = Struct.new(:_1, :_2)
2.2.5 :003 > t = Tuple.new("a", "b")
=> #<struct Tuple _1="a", _2="b">
2.2.5 :004 > t._1
=> "a"
2.2.5 :005 > t._2
=> "b"
aber hier kann man nicht haben Destrukturierung:
2.2.5 :012 > a, b = t
=> {:_1=>"a", :_2=>"b"}
2.2.5 :013 > a
=> {:_1=>"a", :_2=>"b"}
2.2.5 :014 > b
=> nil
Aber dank dieser Trick: https://gist.github.com/stevecj/9ace6a70370f6d1a1511 Destrukturierung funktioniert:
2.2.5 :001 > Tuple = Struct.new(:_1, :_2)
=> Tuple
2.2.5 :002 > t = Tuple.new("a", "b")
=> #<struct Tuple _1="a", _2="b">
2.2.5 :003 > t._1
=> "a"
2.2.5 :004 > class Tuple ; def to_ary ; to_a ; end ; end
=> :to_ary
2.2.5 :005 > a, b = t
=> #<struct Tuple _1="a", _2="b">
2.2.5 :006 > a
=> "a"
2.2.5 :007 > b
=> "b"
- 1. Destrukturierung Tupel von Tupel in Schließung
- 2. Verwenden von Shapeless, um Tupel von Future in Future von Tupel über HList zu konvertieren
- 3. Verwenden von Sets in Ruby
- 4. Optional Tupel Tupel von Optionen
- 5. Convert Tupel-Strings Tupel von Strings
- 6. Wie Data.List.iterate auf Tupel verwenden
- 7. Verwenden von Listen und Tupel in Python if Anweisungen
- 8. Verwenden von Unix-Prozesssteuerungsmethoden in Ruby
- 9. Verwenden von lokalen Konstanten in Ruby
- 10. eine lange Tupel in kleinere Tupel
- 11. Extrahieren von Tupel-Indizes
- 12. Listenverstehen verwenden, um ein Tupel zu erstellen
- 13. Verwenden von Parallelem Juwel in Ruby; Wie viele Kerne verwenden?
- 14. Wie Apache Sturm Tupel zu verwenden
- 15. Ein Tupel in einem Tupel wiederholen
- 16. Sortieren von Boost-Tupel
- 17. Verwenden Sie funktionale Kombinatoren auf Scala Tupel?
- 18. Wie Tupel in Zeichenfolge in Tupel-Objekt konvertieren?
- 19. Tupel in Xaml deklarieren
- 20. Konvertieren von numpy Array in Tupel
- 21. Verwenden von Launched mit Mavericks und Ruby
- 22. Kompilierzeit-Umlagerung von Arten in einem Tupel
- 23. Tupel sortieren in F #
- 24. Verwenden von wget über Ruby on Rails
- 25. Verwenden von 'Ruby' ohne Argumente friert Terminal
- 26. Verwenden von Ruby 1.9.2 in Entwicklung und REE in Produktion
- 27. ein anderes Tupel zu einem Tupel von Tupeln hinzufügen
- 28. Verwenden leeres Tupel als standardmäßiges iterables Argument in Funktion
- 29. Tupel-Liste von Dict in Python
- 30. "in" -Anweisung für Listen/Tupel von Floats
Haben Sie jemals D in Ruby implementieren? Wenn ja, haben Sie den Link dazu? Ich habe kürzlich an etwas ähnlichem gearbeitet und würde gerne sehen, was Sie bisher gemacht haben. – dkubb
Nein; Ich bin noch nie so weit gekommen. Ich habe mich durch verschiedene andere Dinge gekämpft, um wieder zurück zu kommen. Ich habe mehrere Bibliotheken gefunden, die scheinen, als ob sie helfen würden: LazyList und arel. Ich kam im Grunde zu dem Schluss, dass LINQ in .NET fast da war, dann fand sich arel, das auch nah war. Die Verwendung von LazyList und das Entfernen der Direkt-zu-SQL-Konvertierung, die ebenfalls ein Projektziel darstellt, würde Sie fast dorthin bringen. Das heißt, ich würde gerne sehen, was Sie bisher haben. Ich bin immer noch ein kleines Stück davon entfernt, darauf zurückzukommen. –
Ehrgeiz ist eine andere interessant aussehende Bibliothek, aber es wurde seit einiger Zeit nicht aktualisiert. Das war die erste, die ich gefunden habe. arel sieht aus wie in der gleichen Tradition. –