Est-ce que quelqu'un utilise des tuples dans Ruby? Si oui, comment peut-on implémenter un tuple? Les hachages Ruby sont sympas et fonctionnent presque aussi bien, mais j'aimerais vraiment voir quelque chose comme la classe Tuple en Python, où vous pouvez utiliser la notation .
pour trouver la valeur que vous cherchez. Je le veux afin que je puisse créer une implémentation de D, similaire à Dee pour Python.Utilisation de tuples dans Ruby?
Répondre
bref exemple:
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
C'est exactement ce que je cherchais. Merci! –
np :) pour vous répondre: non je n'utilise pas de tuples dans ruby, comme openstructs ou autre. J'utilise des classes à l'extrémité supérieure et des hachages à l'extrémité inférieure :) –
c'est une mauvaise réponse, juste un lien? Sérieusement? que se passe-t-il si/quand le lien est brisé? –
Basé sur le fait que vous parlez de hash et. notation Je vais supposer que vous voulez dire un type différent de tuple que le tri (1. "a")
. Vous recherchez probablement la classe Struct
. par exemple:
Person = Struct.new(:name, :age)
me = Person.new
me.name = "Guy"
me.age = 30
C'est proche, mais devoir nommer ça me dérange. Je cherchais quelque chose comme le genre (1. "a") mais avec la notation get/set de la propriété que vous décrivez. –
@panesofglass, inutile de ne rien nommer: a = Struct.new (: nom,: age) .new; a.name = "Guy" – paradoja
Puis-je définir 'a = Struct.new (: nom,: âge)' et plus tard dire a.new? Je suppose que oui. Je vais devoir vérifier ça. Ce serait beaucoup plus explicite quant à ce que je veux. –
Bien que ce ne soit pas strictement un tuple (ne peut pas faire la notation dot des membres), vous pouvez attribuer une liste de variables à partir d'une liste, qui souvent résoudre des problèmes avec rubis être passe par -value lorsque vous êtes après une liste de valeurs de retour.
E.g.
:linenum > (a,b,c) = [1,2,3]
:linenum > a
=> 1
:linenum > b
=> 2
:linenum > c
=> 3
Vous pouvez faire quelque chose avec destructuration similaire:
def something((a, b))
a + b
end
p something([1, 2])
Cette imprime 3
comme prévu.
Je suis l'auteur de Gem for Ruby tuples.
Vous disposez de deux classes:
Tuple
en généralPair
en particulier
Vous pouvez les initialiser de différentes manières:
Tuple.new(1, 2)
Tuple.new([1, 2])
Tuple(1, 2)
Tuple([1, 2])
Tuple[1, 2]
Les deux les classes ont des méthodes auxiliaires:
length
/arity
- qui renvoie nombre de valeurs à l'intérieur de tuplefirst
/last
/second
(seule paire) - qui renvoie un des éléments correspondants[]
qui vous donne un accès à l'un des éléments particuliers
Vous pouvez railler Scala tUPLES avec cette astuce:
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"
mais ici vous ne pouvez pas avoir destructuration:
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
Mais grâce à cette astuce: https://gist.github.com/stevecj/9ace6a70370f6d1a1511 destructuration fonctionnera:
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. comparaison Tuples dans
- 2. Utilisation de plusieurs processus dans Ruby
- 3. Utilisation de Ruby Gem DBI
- 4. Parse error de tuples imbriquées dans scala
- 5. Utilisation des migrations dans Ruby on Rails
- 6. Utilisation de la valeur globale ruby dans le fichier YAML
- 7. Utilisation de la sous-classe droit d'exception dans Ruby
- 8. Liste d'accès des tuples
- 9. Liste de tuples de dict en Python
- 10. Utilisation d'un formulaire Windows avec Ruby
- 11. Liste des tuples au recomposition de Numpy
- 12. Tri des tuples en F #
- 13. Format un tableau de tuples dans un joli « table »
- 14. Gestion des collections de tuples dans Objective-C
- 15. Utilisation de Send_File sur une source distante (Ruby on Rails)
- 16. Utilisation du monde réel des objets de liaison en ruby
- 17. macruby: Utilisation de la méthode ruby comme AXObserverCallback
- 18. Tri un tuple qui contient tuples
- 19. Comment convertir implicitement Tuples en vectoriel dans Scala
- 20. utilisant tuples sql à la clause
- 21. Langues qui autorisent les tuples nommés
- 22. Meilleure façon d'encoder des tuples avec json
- 23. MySQL - trouver des tuples en double
- 24. Utilisation de deux tableaux (multi) dimensions dans Erlang
- 25. RAII dans Ruby (Ou, comment gérer les ressources dans Ruby)
- 26. Utilisation des bibliothèques et gemmes Ruby avec une application Shoes
- 27. Haskell: Imprimer le contenu d'une liste de tuples
- 28. Utilisation de la présence/absence d'erreurs comme conditions avec if/elsif/else dans Ruby
- 29. Comment énumérer() sur une liste de tuples en Python?
- 30. Meilleur moyen de convertir une liste à un ensemble de deux-tuples dans Erlang?
Avez-vous mis en œuvre jamais D en Ruby? Si oui, avez-vous le lien? J'ai travaillé sur quelque chose de similaire récemment, et j'aimerais voir ce que vous avez fait jusqu'à présent. – dkubb
Non; Je ne suis jamais allé aussi loin. J'ai tourné autour de plusieurs autres choses en essayant d'y revenir. J'ai trouvé plusieurs bibliothèques qui semblent aider: LazyList et arel. Je suis essentiellement arrivé à la conclusion que LINQ dans .NET était presque là, puis trouvé arel, qui était également proche. L'utilisation de LazyList et la suppression de la conversion directe vers SQL, dont le dernier est également un objectif du projet, vous permettraient presque d'y arriver. Cela dit, j'aimerais voir ce que vous avez jusqu'ici. Je suis encore un peu loin d'y revenir. –
L'ambition est une autre bibliothèque intéressante, mais elle n'a pas été mise à jour depuis un certain temps. C'est celui que j'ai trouvé en premier. arel a l'air d'avoir continué dans la même tradition. –