-1
votes

Comment sélectionner un nom à partir d'un tableau et vérifiez s'il est majuscule

J'ai besoin de choisir un nom au hasard à partir d'un tableau dans Ruby, puis vérifiez s'il est en majuscule. Jusqu'à présent, j'ai: xxx

Il doit être comme deux méthodes distinctes comme celle-ci.


3 commentaires

Dupliqué possible de Comment puis-je vérifier un Le mot est déjà tous en majuscule dans Ruby?


Essayez ceci: arr.sample.then {| mot | Word == word.uppase} . Voir Objet # puis (AKA céder_self ).


Bienvenue à! Votre exemple de code ne montre pas une tentative authentique de résoudre le problème, ce n'est qu'un aperçu du code. S'il vous plaît voir " Comment demander " et les pages liées et " MCVE .


3 Réponses :


3
votes

quelque chose comme ceci: xxx

puis quelque chose comme: xxx


0 commentaires

0
votes

Peut-être quelque chose comme ceci: xxx pré>

update strong> p>

J'ai publié le code sans trop penser à l'abstraction et je pense que ce serait Beaucoup mieux pour encapsuler le nom et la vérification des majuscules pour séparer la classe et la rendre immuable, puis effectuez une classe de générateur qui sélectionne une entité de la collection. P>

class NameGenerator
    def initialize(items)
        @items = items
    end

    def next
        @items.sample
    end
end

class Name 
    attr_reader :name

    def initialize(name)
        @name = name
    end  

    def is_uppercase?
        @name.match(/\p{Lower}/) == nil
    end
end 

ng = NameGenerator.new [
    Name.new("name"),
    Name.new("Name"),
    Name.new("NAME"),
    Name.new("na-me")
]

name = ng.next
puts name.name, name.is_uppercase?


4 commentaires

Vous générez des chaînes aléatoires et non des noms, outre OP veut choisir des noms choisis au hasard à partir d'un tableau. @chars ne change pas et est identique pour chaque instance de la classe, êtes-vous sûr qu'il devrait être une variable d'instance?


Raison c'est écrit comme ceci est que des caractères ou des noms pourraient être initialisés dans le constructeur.


Cela me rappelle l'histoire du Sledgehammer et de la mouche.


Je ne suis pas développeur de rubis, est-ce trop de code pour une tâche aussi simple :)



0
votes

Si vous voulez simplement vérifier la première lettre:

names = %w(Kirk mccoy scott Spock)

names.sample.then { |name| [name, name[0] == name[0].upcase] }
#=> ["mccoy", false]


0 commentaires