06. januar 2005 - 16:22Der er
7 kommentarer og 1 løsning
Metodekald med "dynamisk" argument
Antag at jeg har et objekt, som indeholder en række simple variabler a, b, c, ... og at jeg har en metode beregn(), som returnerer et sandt/falsk-udsagn ud fra en forespørgsel på disse, f.eks.
if (a==1 | b==1) return true; - eller: if ((a==0 | b==0) && c==7) return false; - eller noget helt tredie.
Kan jeg skrive min metode beregn() således, at den kan tage et vilkårligt argument indeholdende a, b, c, ... og foretage evalueringen - altså en slags "string-argument" til beregn(), som evalueres?
public class ValParse { private static final Pattern p = Pattern.compile("(?:.*?)(?:a[ ]*=[ ]*)([0-9]+)(?:.*?)(?:b[ ]*=[ ]*)([0-9]+)(?:.*?)(?:c[ ]*=[ ]*)([0-9]+)"); public static void parse(String s) { Matcher m = p.matcher(s); while (m.find()) { String a = m.group(1); String b = m.group(2); String c = m.group(3); System.out.println(a + " " + b + " " + c); } } public static void main(String[] args) { parse("a=1 b=2 c=3"); parse("bla a = 4 bla b = 5 bla c = 6 bla"); } }
->arne_v: Pyha, det ser lidt kringlet ud, selv om du skriver, at det er nemt :-)
Egentlig er jeg ligeglad med indholdet af a, b og c - jeg interesserer mig her blot for resultatet af et logisk udtryk, der involverer a, b og c. Kan man på den baggrund gøre noget simplere?
Sådan lidt pseudo-kode-agtigt tænker jeg på noget med: String s = "(a==0 | b==0) && c==7"; if Math.eval(s)==true ...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.