2009-05-21 9 views
4

Ich schreibe eine function, die UNICODE-Ziffern in ASCII-Ziffern transkribiert, und ich bin ein wenig ratlos, was zu tun ist, wenn die Zeichenfolge Ziffern aus verschiedenen UNICODE-Ziffern enthält. Also zum Beispiel, wenn ich die Zeichenfolge "\ x {2463} \ x {24F6}" ("④⓶") habe. Sollte meine FunktionWie soll ich mit Ziffern aus unterschiedlichen UNICODE-Ziffern in derselben Zeichenfolge umgehen?

  1. 42 zurückgeben?
  2. krächzen, dass die Zeichenfolge gemischte Sätze enthält?
  3. Karpfen, dass die Zeichenfolge gemischte Sätze enthält und 42 zurückgeben?
  4. geben Sie dem Benutzer ein zusätzliches Argument, um eines der drei oben genannten Verhaltensweisen anzugeben?
  5. etwas anderes tun?

Antwort

1

Ihre aktuelle Funktion scheint # 1 zu tun.

Ich schlage vor, dass Sie auch eine andere Funktion zu tun # 4, aber nur schreiben sollen, wenn die Anforderung erscheint, und nicht vor.

Ich bin sicher, Joel schrieb in letzter Zeit in einem Blogartikel über "vorzeitige Umsetzung", aber ich kann es nicht finden.

+0

Nun, da dies auf CPAN gehen wird, werde ich nicht wissen, wie die Leute es verwenden wollen. Es ist einfach genug, der aktuellen Funktion einen optionalen Parameter hinzuzufügen und zu überprüfen, ob der Parameter übergeben wird, oder zu tun, was ich gerade mache, wenn dies nicht der Fall ist. Was ich nicht weiß ist, ob jemand diese Funktionalität will. –

+0

also füge es später hinzu, wenn jemand fragt ;-) – Alnitak

0

Ich bin mir nicht sicher, sehe ich ein Problem.

Sie unterstützen die numerische Konvertierung aus einer Reihe von Skripten, dh Sie kennen die Unicode-Codepunkte für ihre numerischen Zeichen.

Wenn Sie in Ihren Eingabedaten einen unbekannten Codepunkt finden, handelt es sich um einen Fehler.

Es liegt an Ihnen, was Sie im Falle eines Fehlers tun; Sie können ein Leerzeichen oder einen Unterstrich einfügen oder die Konvertierung abbrechen. Was Sie tun würden, hängt von der Umgebung ab, in der Ihre Funktion ausgeführt wird. Das können wir dir nicht sagen.

+0

Ich denke du liegst falsch. Die Codepunkte, die speziell _do_ haben, haben die gleiche Bedeutung wie die Ziffern 0..9, es ist nur so, dass einige Kulturen völlig unterschiedliche Glyphen für sie verwenden. – Alnitak

+0

@Alnitak: Sie sind richtig, ich habe die Frage falsch gelesen. –

+0

@Atlnitak: Antwort umgeschrieben –

0

Mein erster Gedanke war # 4; strikt darauf basierend, dass ich Optionen mag. Allerdings habe ich meine Meinung geändert, als ich Ihre Funktion sah.

Der Zweck der Funktion scheint einfach zu sein, die resultierenden Ziffern 0..9 zu bekommen. Benutzer können es nützlich finden, gemischte Sets (eine Funktion :) zu senden. Ich werde es benutzen.

0

Wenn Sie Eingaben in Basen größer als 10 verarbeiten müssen, müssen Sie möglicherweise viele Varianten der ersten 6 Buchstaben des lateinischen Alphabets ("ABCDEF") als Ziffern in allen ihren Formen behandeln.

+0

Das wären keine UNICODE-Ziffern, oder? Dies hängt damit zusammen, dass die Übereinstimmungen (d. H. Zeichen mit der Eigenschaft "digit") in Perl in etwas zurückverwandelt werden, mit dem Sie rechnen können. Matching Numbers ist etwas anderes, das ich dem Individuum überlasse. Zum Beispiel wird "IV" manchmal als Nummer (4) und manchmal als Abkürzung (intravenös) betrachtet. Es gibt keine Möglichkeit (die Verarbeitung natürlicher Sprache zu sperren), um festzustellen, welche Bedeutung (wenn überhaupt) "IV" hat. "\ X {1814} \ x {1812}" ist jedoch eindeutig 42 in mongolischen Ziffern. –

Verwandte Themen