Bunu Ruby'de buldum, ancak Python'da yaptığım şeyden tanıyorum; "uyarısı" operatörü. Uzun lafın kısası, “uyarım” operatörünün ne yaptığını taklit etmenin daha kolay bir yolu olup olmadığını merak ediyorum.Splat operatörü taklit etmek için daha kolay bir alternatif var mı?
Geri kalanının arayabileceği merkezi bir yöntem yaptım çünkü çok benzer olanlarım olduğunu fark ettim ve hepsi de birkaç küçük şey hariç aynı şeyi yapıyorlardı. İşte yöntem imzası:
private String callScript(String scriptLocation, String... extraArgs) throws Exception {
Ben en az bir argüman (scriptLocation
) gerektirir ve daha sonra ekstra herhangi bir sayıda argüman izin vermek istiyorum. Bununla yaptığım şey, bir ProcessBuilder
oluşturmaktır. Benim arzum böyle bir şey yapmaktır: Yani
List<String>
String[]
String...
: gibi
ProcessBuilder pb = new ProcessBuilder("something", scriptLocation, /* extraArgs */);
Ama tabii, ProcessBuilder
yapıcı yalnızca kabul şeyler benim yaklaşımım açıkça işe yaramaz. ince olarak bildiğim kadarıyla çalışır
Bulunduğum geçici çözüm, geçerli:
List<String> finalArgs = new ArrayList<String>();
finalArgs.add("something");
finalArgs.add(scriptLocation);
finalArgs.addAll(Arrays.asList(extraArgs));
ProcessBuilder pb = new ProcessBuilder(finalArgs);
(evet, ben
List
kullanmak gerekmez anlamak ve sadece
String[]
yapabiliriz)
(ve evet, ben extraArgs
aracılığıyla döngü olabilir anlamak ve yerine addAll
ve Arrays.asList()
kullanmak zorunda kalmadan, tek tek finalArgs
eklemek) (
bir nd evet, değişken argümanlarla birleştirilmiş belirli argümanları döndürerek, geçici çözümümüzü başarılı bir şekilde yürütebildiğimi biliyorum. Bu yüzden bu son üç ifadenin dışında, bunu başarabilecek bir şey var mıdır?
'Dize ...' aslında 'String []'. İlk parametreyi zorlamak için "String s1", "String [] s2ToN" gibi parametrelerinizi bölerseniz, yeni bir dizi/liste içinde bir kopya oluşturmak onları birleştirmek için yapabileceğiniz tek şeydir. – zapl
@zapl Üzgünüm, bunu biliyordum ama bu kısmı yanlış anladım/gözden geçiriyor gibi görünüyor. Yani temelde şu anki yaklaşımımın (bazı şekillerde) bunun üstesinden gelmenin tek yolu olduğunu mu söylüyorsun? Sorun değil, sadece bir şey eksik olduğunu bilmiyordum – Ian
Soruyu anladığımdan emin değilim ... Listeye bazı dizeler koymak için daha iyi bir yol mu arıyorsunuz? – jtahlborn