Ich habe eine YAML-Datei, die ein paar Tasten mit mehreren Werten und ein Paar mit einem Wert hat:Lese YAML mit Rubin, unerwartete Rückkehr Typ
inbox:
paul: 'PHILADELPHIA-RO-ADMIN'
tanny: 'PA-C-INDIANA-ADMIN'
mary:
- 'MD-C-LAUREL-ADMIN'
- 'MD-E-BALTIMORE-ADMIN'
- 'MD-R1-CAMBRIDGE-ADMIN'
- 'MD-R2-BELAIR-ADMIN'
- 'MD-R4-LAUREL-ADMIN'
- 'MD-R5-HAGERSTWN-ADMIN'
mike:
- 'VA-E-Richmond-Admin'
- 'VA-Richmond-Admin'
- 'VA-Manassas-Admin'
- 'VA-Norfolk-Admin'
- 'VA-Roanoke-Admin'
- 'VA-Verona-Admin'
Was ich bin versucht zu tun ist, wenn der Schlüssel hat mehr als ein Wert ausgegeben der Schlüssel hat mehr als einen Wert, aber wenn der Schlüssel nur einen Wert hat, nur diesen Wert ausgeben. Ich versuche, die Array.count
Funktion zu verwenden, um dies zu tun, ich habe über ein Problem kommen, wo, wenn das Array nur einen Wert hat es im Innern des Schlüssels Menge von Zeichen zählt, zum Beispiel:
require 'yaml'
POC = YAML.load_file('test.yml')
def get_poc(name)
data = POC['inbox'][name.downcase]
puts data.count
if data.count == 1
POC['inbox'][name]
else
puts "Multiple inboxes found for #{name.capitalize.chomp}"
data.each.with_index(1) do |str, i|
puts "#{i}. #{str}"
end
puts 'One of the above inboxes is the correct inbox for this ticket.'
end
end
Wenn dieses in IRB ausgeführt wird:
irb(main):020:0> get_poc('mary')
6
Multiple inboxes found for Mary
1. MD-C-LAUREL-ADMIN
2. MD-E-BALTIMORE-ADMIN
3. MD-R1-CAMBRIDGE-ADMIN
4. MD-R2-BELAIR-ADMIN
5. MD-R4-LAUREL-ADMIN
6. MD-R5-HAGERSTWN-ADMIN
One of the above inboxes is the correct inbox for this ticket.
=> nil
irb(main):021:0> get_poc('paul')
21
ArgumentError: wrong number of arguments (given 0, expected 1+)
from (irb):10:in `count'
from (irb):10:in `get_poc'
from (irb):21
from C:/Ruby23/bin/irb.cmd:19:in `<main>'
irb(main):022:0>
es scheint, dass es für mehrere Werte funktioniert, aber wenn man sich nur ein Wert ist es über die gesamte Länge des Wertes von Zeichen tatsächlich zu zählen scheint.
Ich habe auch versucht die Array.length
Methode:
require 'yaml'
POC = YAML.load_file('test.yml')
def get_poc(name)
data = POC['inbox'][name.downcase]
puts data.length
if data.length == 1
POC['inbox'][name]
else
puts "Multiple inboxes found for #{name.capitalize.chomp}"
data.each.with_index(1) do |str, i|
puts "#{i}. #{str}"
end
puts 'One of the above inboxes is the correct inbox for this ticket.'
end
end
gleiche Problem unterschiedliche Fehler:
irb(main):040:0> get_poc('mary')
6
Multiple inboxes found for Mary
1. MD-C-LAUREL-ADMIN
2. MD-E-BALTIMORE-ADMIN
3. MD-R1-CAMBRIDGE-ADMIN
4. MD-R2-BELAIR-ADMIN
5. MD-R4-LAUREL-ADMIN
6. MD-R5-HAGERSTWN-ADMIN
One of the above inboxes is the correct inbox for this ticket.
=> nil
irb(main):041:0> get_poc('paul')
21
Multiple inboxes found for Paul
NoMethodError: undefined method `each' for "PHILADELPHIA-RO-ADMIN":String
from (irb):34:in `get_poc'
from (irb):41
from C:/Ruby23/bin/irb.cmd:19:in `<main>'
irb(main):042:0>
Wie kann ich die Methode bekommen nur den Wert als ein Element zu zählen?
Das einzige Problem ist, dass count nicht 1 zurückgibt, es gibt die Länge der Zeichenfolge zurück. Aber warum gibt es eine 'String' und keine' Array' zurück? – JohnDoeYo
'count' und' length' haben eine andere Bedeutung für 'Strings', also nein, sie geben nicht die erwartete 1 zurück. Es wird ein String zurückgegeben, da dies in der YAML-Datei definiert ist. Eine Liste mit einem einzelnen Objekt müsste eine gestrichelte Liste sein. –