คำถามติดแท็ก variadic-functions

ฟังก์ชันเป็นตัวแปรหากสามารถยอมรับจำนวนอาร์กิวเมนต์ได้ นั่นคือความแข็งแกร่งของมันไม่ได้รับการแก้ไข ตัวย่อ "varargs" มักใช้เพื่ออ้างถึงฟังก์ชันประเภทนี้

21
** (ดาวคู่ / ดอกจัน) และ * (ดาว / ดอกจัน) ทำอะไรเพื่อพารามิเตอร์
Наэтотвопросестьответына กองมากเกินнарусском : Чтозначит * (звёздочка) и ** двойнаязвёздочкавПитоне? ในคำจำกัดความของวิธีการต่อไปนี้จะทำอะไร*และ**ทำparam2อะไร def foo(param1, *param2): def bar(param1, **param2):


7
ต่อสองชิ้นเข้าด้วยกันใน Go
ฉันพยายามที่จะรวมชิ้นและชิ้น[1, 2] [3, 4]ฉันจะทำสิ่งนี้ได้อย่างไรในโกะ? ฉันเหนื่อย: append([]int{1,2}, []int{3,4}) แต่ได้: cannot use []int literal (type []int) as type int in append อย่างไรก็ตามเอกสารประกอบที่ดูเหมือนจะบ่งบอกว่าเป็นไปได้สิ่งที่ฉันหายไป? slice = append(slice, anotherSlice...)

5
มลพิษที่เป็นไปได้ของฮีปที่เป็นไปได้ผ่านพารามิเตอร์ varargs
ฉันเข้าใจว่าสิ่งนี้เกิดขึ้นกับ Java 7 เมื่อใช้ varargs กับประเภททั่วไป แต่คำถามของฉันคือ .. Eclipse หมายความว่าอย่างไรเมื่อกล่าวว่า "การใช้งานนั้นอาจก่อให้เกิดมลพิษกับฮีปได้" และ @SafeVarargsคำอธิบายประกอบใหม่จะป้องกันสิ่งนี้ได้อย่างไร

21
ฉันจะแปลงวัตถุ“ อาร์กิวเมนต์” เป็นอาร์เรย์ใน JavaScript ได้อย่างไร
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ argumentsวัตถุใน JavaScript เป็นหูดว่ามันแปลกทำหน้าที่เช่นเดียวกับอาร์เรย์ในสถานการณ์ส่วนใหญ่ แต่ก็ไม่จริงวัตถุอาร์เรย์ ตั้งแต่มันจริงๆสิ่งอื่นทั้งหมดก็ไม่ได้มีฟังก์ชั่นที่มีประโยชน์จากArray.prototypeเช่นforEach, sort, และfiltermap มันง่ายมากที่จะสร้างอาร์เรย์ใหม่จากอ็อบเจกต์อาร์กิวเมนต์ด้วยลูป ตัวอย่างเช่นฟังก์ชันนี้เรียงลำดับอาร์กิวเมนต์: function sortArgs() { var args = []; for (var i = 0; i < arguments.length; i++) args[i] = arguments[i]; return args.sort(); } อย่างไรก็ตามนี่เป็นสิ่งที่น่าสมเพชที่ต้องทำเพื่อเข้าถึงฟังก์ชันอาร์เรย์ JavaScript ที่มีประโยชน์อย่างยิ่ง มีวิธีการในตัวที่จะใช้ไลบรารีมาตรฐานหรือไม่?

10
เหตุใดจึงต้องใช้คำหลักพารามิเตอร์
ฉันรู้ว่านี่เป็นคำถามพื้นฐาน แต่ฉันไม่พบคำตอบ ทำไมต้องใช้ หากคุณเขียนฟังก์ชั่นหรือวิธีการที่ใช้มันเมื่อคุณลบมันรหัสจะยังคงทำงานได้อย่างสมบูรณ์ 100% โดยไม่ต้องใช้มัน เช่น: ด้วย params: static public int addTwoEach(params int[] args) { int sum = 0; foreach (var item in args) sum += item + 2; return sum; } ไม่มีพารามิเตอร์: static public int addTwoEach(int[] args) { int sum = 0; foreach (var item in args) sum …

10
ผ่านจำนวนตัวแปรของการขัดแย้งรอบ ๆ
สมมติว่าฉันมีฟังก์ชั่น C ซึ่งรับอาร์กิวเมนต์จำนวนตัวแปร: ฉันจะเรียกฟังก์ชั่นอื่นซึ่งคาดว่าจะมีจำนวนตัวแปรที่ขัดแย้งกันจากภายในได้อย่างไรโดยผ่านอาร์กิวเมนต์ทั้งหมดที่มีในฟังก์ชันแรก ตัวอย่าง: void format_string(char *fmt, ...); void debug_print(int dbg_lvl, char *fmt, ...) { format_string(fmt, /* how do I pass all the arguments from '...'? */); fprintf(stdout, fmt); }


5
ฉันสามารถส่งอาเรย์เป็นอาร์กิวเมนต์ไปยังเมธอดที่มีอาร์กิวเมนต์ของตัวแปรใน Java ได้หรือไม่?
ฉันต้องการที่จะสามารถสร้างฟังก์ชั่นเช่น: class A { private String extraVar; public String myFormat(String format, Object ... args){ return String.format(format, extraVar, args); } } นี่คือปัญหาที่argsจะถือว่าเป็นObject[]ในวิธีการmyFormatและทำให้เป็นอาร์กิวเมนต์เดียวString.formatในขณะที่ฉันต้องการทุกเดียวObjectในargsการผ่านเป็นอาร์กิวเมนต์ใหม่ เนื่องจากString.formatเป็นวิธีที่มีอาร์กิวเมนต์ที่หลากหลายจึงควรเป็นไปได้ หากเป็นไปไม่ได้มีวิธีการเช่นนี้String.format(String format, Object[] args)หรือไม่? ในกรณีนั้นฉันสามารถผนวกextraVarกับการargsใช้อาร์เรย์ใหม่และส่งผ่านไปยังวิธีการนั้นได้

4
วิธีการส่ง ArrayList ไปยังพารามิเตอร์วิธีการ varargs?
โดยทั่วไปฉันมี ArrayList ของที่ตั้ง: ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>(); ด้านล่างนี้ฉันเรียกวิธีการดังต่อไปนี้: .getMap(); พารามิเตอร์ในเมธอด getMap () คือ: getMap(WorldLocation... locations) ปัญหาที่ฉันมีคือฉันไม่แน่ใจว่าจะผ่านรายการ WHOLE locationsไปสู่วิธีการนั้นได้อย่างไร ฉันพยายามแล้ว .getMap(locations.toArray()) แต่ getMap ไม่ยอมรับเพราะไม่ยอมรับวัตถุ [] ตอนนี้ถ้าฉันใช้ .getMap(locations.get(0)); มันจะทำงานได้อย่างสมบูรณ์แบบ ... แต่ฉันจำเป็นต้องผ่านในสถานที่ทั้งหมด ... แน่นอนฉันสามารถให้เพิ่มlocations.get(1), locations.get(2)ฯลฯ แต่ขนาดของอาร์เรย์แตกต่างกันไป ฉันแค่ไม่คุ้นเคยกับแนวคิดทั้งหมดของArrayList อะไรจะเป็นวิธีที่ง่ายที่สุดในการทำสิ่งนี้? ฉันรู้สึกเหมือนฉันไม่ได้คิดตรงๆตอนนี้

8
เมื่อใดที่คุณใช้ varargs ใน Java
ฉันกลัว varargs ฉันไม่รู้ว่าจะใช้มันเพื่ออะไร นอกจากนี้ยังรู้สึกอันตรายที่จะให้ผู้คนผ่านการโต้แย้งได้มากเท่าที่ต้องการ ตัวอย่างของบริบทที่จะเป็นสถานที่ที่ดีในการใช้เป็นอย่างไร

2
Java SafeVarargs คำอธิบายประกอบมีมาตรฐานหรือแนวปฏิบัติที่ดีที่สุดหรือไม่?
ฉันเพิ่งเจอ@SafeVarargsคำอธิบายประกอบjava Googling สำหรับสิ่งที่ทำให้ฟังก์ชั่น Variadic ใน Java ไม่ปลอดภัยทำให้ฉันค่อนข้างสับสน (heap poisoning? erased types?) ดังนั้นฉันอยากรู้บางสิ่ง: สิ่งที่ทำให้ฟังก์ชั่น Java variadic ไม่ปลอดภัยใน@SafeVarargsแง่ (อธิบายโดยเฉพาะอย่างยิ่งในรูปแบบของตัวอย่างในเชิงลึก)? ทำไมคำอธิบายประกอบนี้ถึงดุลยพินิจของโปรแกรมเมอร์? นี่ไม่ใช่สิ่งที่คอมไพเลอร์ควรตรวจสอบใช่ไหม มีมาตรฐานบางอย่างที่ต้องปฏิบัติตามเพื่อให้แน่ใจว่าการทำงานของเขาปลอดภัยแน่นอน varags? หากไม่เป็นเช่นนั้นวิธีปฏิบัติที่ดีที่สุดที่จะทำให้แน่ใจได้คืออะไร?

12
เป็นไปได้ไหมที่จะส่งอาร์กิวเมนต์จำนวนตัวแปรไปยังฟังก์ชัน JavaScript
เป็นไปได้ไหมที่จะส่งอาร์กิวเมนต์จำนวนตัวแปรไปยังฟังก์ชัน JavaScript จากอาร์เรย์ var arr = ['a','b','c'] var func = function() { // debug alert(arguments.length); // for(arg in arguments) alert(arg); } func('a','b','c','d'); // prints 4 which is what I want, then 'a','b','c','d' func(arr); // prints 1, then 'Array' ฉันเพิ่งเขียน Python จำนวนมากและมันเป็นรูปแบบที่ยอดเยี่ยมที่สามารถรับ varargs และส่งได้ เช่น def func(*args): print len(args) for i …

9
วิธีจับคู่ varargs ใน Mockito อย่างถูกต้อง
ฉันพยายามจำลองวิธีด้วยพารามิเตอร์ vararg โดยใช้ Mockito: interface A { B b(int x, int y, C... c); } A a = mock(A.class); B b = mock(B.class); when(a.b(anyInt(), anyInt(), any(C[].class))).thenReturn(b); assertEquals(b, a.b(1, 2)); สิ่งนี้ใช้ไม่ได้อย่างไรก็ตามถ้าฉันทำสิ่งนี้แทน: when(a.b(anyInt(), anyInt())).thenReturn(b); assertEquals(b, a.b(1, 2)); ใช้งานได้แม้ว่าฉันจะไม่ได้โต้แย้งอาร์กิวเมนต์ varargs ทั้งหมดเมื่อทำการขัดวิธี เบาะแสใด ๆ

7
ส่งผ่านอาร์เรย์ไปยังฟังก์ชันที่มีจำนวนของตัวแปรใน Swift
ในภาษาโปรแกรม Swiftมันพูดว่า: ฟังก์ชั่นยังสามารถนำจำนวนอาร์กิวเมนต์ที่หลากหลายมารวมกันเป็นอาร์เรย์ func sumOf(numbers: Int...) -> Int { ... } เมื่อฉันเรียกฟังก์ชั่นดังกล่าวพร้อมกับรายการตัวเลขคั่นด้วยเครื่องหมายจุลภาค (`sumOf (1, 2, 3, 4) พวกมันถูกทำให้เป็นอาร์เรย์ภายในฟังก์ชัน คำถาม: ถ้าฉันมีตัวเลขที่ฉันต้องการส่งผ่านไปยังฟังก์ชั่นนี้แล้ว? let numbers = [1, 2, 3, 4] sumOf(numbers) สิ่งนี้ล้มเหลวด้วยข้อผิดพลาดของคอมไพเลอร์“ ไม่พบโอเวอร์โหลดสำหรับ '__conversion' ที่ยอมรับอาร์กิวเมนต์ที่ให้มา” มีวิธีเปลี่ยนอาร์เรย์ที่มีอยู่ให้เป็นรายการองค์ประกอบที่ฉันสามารถส่งไปยังฟังก์ชัน Variadic ได้หรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.