คำถามติดแท็ก pass-by-reference

Pass by reference เป็นกลยุทธ์การจัดเรียงอาร์กิวเมนต์โดยตำแหน่งของตัวแปรในหน่วยความจำจะถูกส่งผ่านไปยังฟังก์ชันแทนที่จะเป็นสำเนาค่าของตัวแปรแม้ว่าฟังก์ชันจะปรากฏในซอร์สโค้ดเพื่อรับตัวแปรเองแทนที่จะเป็นตัวชี้

30
Java "ผ่านการอ้างอิง" หรือ "pass-by-value" หรือไม่?
ผมคิดเสมอว่าเป็น Java ผ่านโดยการอ้างอิง อย่างไรก็ตามฉันได้เห็นโพสต์บล็อกสองสามตัวอย่าง (ตัวอย่างเช่นบล็อกนี้ ) ที่อ้างว่าไม่ได้ ฉันไม่คิดว่าฉันเข้าใจความแตกต่างที่พวกเขาทำ คำอธิบายคืออะไร

26
ฉันจะส่งผ่านตัวแปรโดยอ้างอิงได้อย่างไร
เอกสาร Python ดูเหมือนไม่ชัดเจนว่าพารามิเตอร์ถูกส่งผ่านโดยการอ้างอิงหรือค่าและรหัสต่อไปนี้สร้างค่าไม่เปลี่ยนแปลง 'ดั้งเดิม' class PassByReference: def __init__(self): self.variable = 'Original' self.change(self.variable) print(self.variable) def change(self, var): var = 'Changed' มีบางอย่างที่ฉันสามารถทำได้เพื่อส่งผ่านตัวแปรโดยการอ้างอิงจริงหรือไม่?

30
JavaScript เป็นภาษาแบบอ้างอิงหรืออ้างอิงผ่านค่าหรือไม่
ประเภทดั้งเดิม (หมายเลข, สตริง, ฯลฯ ) จะถูกส่งผ่านตามค่า แต่วัตถุไม่เป็นที่รู้จักเพราะพวกเขาสามารถเป็นได้ทั้งผ่านโดยค่า (ในกรณีที่เราพิจารณาว่าตัวแปรถือวัตถุในความเป็นจริงการอ้างอิงถึงวัตถุ ) และการอ้างอิงแบบส่งต่อ (เมื่อเราพิจารณาว่าตัวแปรไปยังวัตถุถือวัตถุเอง) แม้ว่ามันจะไม่สำคัญในตอนท้าย แต่ฉันต้องการที่จะรู้ว่าอะไรคือวิธีที่ถูกต้องในการนำเสนอข้อโต้แย้งผ่านอนุสัญญา มีข้อความที่ตัดตอนมาจากข้อกำหนดของ JavaScript ซึ่งกำหนดสิ่งที่ควรจะเป็นความหมายเกี่ยวกับเรื่องนี้?

15
ความแตกต่างระหว่างการส่งต่อโดยอ้างอิงกับการผ่านตามมูลค่าคืออะไร
อะไรคือความแตกต่างระหว่าง พารามิเตอร์ที่ส่งผ่านโดยการอ้างอิง พารามิเตอร์ผ่านค่าหรือไม่ กรุณายกตัวอย่างให้ฉันหน่อยได้ไหม

12
เหตุใดฉันจึงควรใช้คำว่า“ final” บนพารามิเตอร์ method ใน Java?
ฉันไม่เข้าใจว่าfinalคำหลักนั้นมีประโยชน์จริง ๆเมื่อใช้กับพารามิเตอร์ของวิธี ถ้าเราไม่รวมการใช้คลาสที่ไม่ระบุชื่อการอ่านและการประกาศเจตนานั้นดูเหมือนว่าจะไร้ค่าสำหรับฉัน การบังคับใช้ว่าข้อมูลบางอย่างยังคงไม่คงที่เท่าที่ควร หากพารามิเตอร์เป็นแบบดั้งเดิมมันจะไม่มีผลกระทบเนื่องจากพารามิเตอร์ถูกส่งผ่านไปยังวิธีการเป็นค่าและการเปลี่ยนแปลงมันจะไม่มีผลนอกขอบเขต หากเราส่งพารามิเตอร์โดยการอ้างอิงตัวอ้างอิงเองนั้นเป็นตัวแปรในตัวเครื่องและหากการอ้างอิงนั้นเปลี่ยนจากภายในเมธอดนั่นจะไม่มีผลกระทบใด ๆ จากภายนอกขอบเขตของเมธอด ลองพิจารณาตัวอย่างทดสอบง่ายๆด้านล่าง การทดสอบนี้ผ่านแม้ว่าวิธีการจะเปลี่ยนค่าของการอ้างอิงที่ให้ แต่ก็ไม่มีผลใด ๆ public void testNullify() { Collection<Integer> c = new ArrayList<Integer>(); nullify(c); assertNotNull(c); final Collection<Integer> c1 = c; assertTrue(c1.equals(c)); change(c); assertTrue(c1.equals(c)); } private void change(Collection<Integer> c) { c = new ArrayList<Integer>(); } public void nullify(Collection<?> t) { t = null; …

10
เป็นไปได้หรือไม่ที่จะเปลี่ยนค่าของอาเรย์เมื่อทำการ foreach ใน javascript
ตัวอย่าง: var arr = ["one","two","three"]; arr.forEach(function(part){ part = "four"; return "four"; }) alert(arr); อาร์เรย์ยังคงอยู่กับค่าดั้งเดิมมีวิธีใดบ้างที่จะมีการเขียนการเข้าถึงองค์ประกอบของอาร์เรย์จากฟังก์ชันวนซ้ำ

11
เหตุใดจึงต้องใช้คำหลัก 'อ้างอิง' เมื่อส่งผ่านวัตถุ
หากฉันส่งวัตถุไปยังวิธีการเหตุใดฉันจึงควรใช้คำหลักอ้างอิง นี่ไม่ใช่พฤติกรรมเริ่มต้นใช่หรือไม่ ตัวอย่างเช่น: class Program { static void Main(string[] args) { TestRef t = new TestRef(); t.Something = "Foo"; DoSomething(t); Console.WriteLine(t.Something); } static public void DoSomething(TestRef t) { t.Something = "Bar"; } } public class TestRef { public string Something { get; set; } } ผลลัพธ์คือ "บาร์" ซึ่งหมายความว่าวัตถุถูกส่งผ่านเป็นการอ้างอิง

13
ส่งผ่านตัวแปรตามการอ้างอิงใน Javascript
ฉันจะส่งผ่านตัวแปรโดยอ้างอิงใน JavaScript ได้อย่างไร ฉันมีตัวแปร 3 ตัวที่ฉันต้องการใช้ในการดำเนินการหลายอย่างดังนั้นฉันจึงต้องการที่จะใส่มันไว้ในการวนรอบและดำเนินการกับแต่ละคน รหัสหลอก: myArray = new Array(var1, var2, var3); for (var x = 0; x < myArray.length; x++){ //do stuff to the array makePretty(myArray[x]); } //now do stuff to the updated vars วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร?

8
อาร์เรย์ใน PHP ถูกคัดลอกเป็นค่าหรืออ้างอิงถึงตัวแปรใหม่และเมื่อส่งผ่านไปยังฟังก์ชั่นหรือไม่
1) เมื่ออาร์เรย์ถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังเมธอดหรือฟังก์ชันมันถูกส่งผ่านโดยการอ้างอิงหรือตามค่าหรือไม่ 2) เมื่อกำหนดอาเรย์ให้กับตัวแปรตัวแปรใหม่อ้างอิงถึงอาเรย์ดั้งเดิมหรือเป็นสำเนาใหม่หรือไม่? เกี่ยวกับการทำสิ่งนี้: $a = array(1,2,3); $b = $a; คือ$bการอ้างอิงถึง$a?


7
วิธีการส่งผ่านวัตถุไปยังฟังก์ชั่นใน C ++?
ฉันใหม่สำหรับการเขียนโปรแกรม C ++ แต่ฉันมีประสบการณ์ใน Java ฉันต้องการคำแนะนำเกี่ยวกับวิธีการส่งวัตถุไปยังฟังก์ชั่นใน C ++ ฉันต้องผ่านพอยน์เตอร์การอ้างอิงหรือค่าที่ไม่ใช่ตัวชี้และไม่อ้างอิงหรือไม่ ฉันจำได้ใน Java ไม่มีปัญหาดังกล่าวเนื่องจากเราส่งเฉพาะตัวแปรที่เก็บการอ้างอิงถึงวัตถุ มันจะดีถ้าคุณสามารถอธิบายได้ว่าจะใช้ตัวเลือกเหล่านั้นด้วยที่ไหน

13
Ruby ผ่านการอ้างอิงหรือตามค่าหรือไม่
@user.update_languages(params[:language][:language1], params[:language][:language2], params[:language][:language3]) lang_errors = @user.errors logger.debug "--------------------LANG_ERRORS----------101-------------" + lang_errors.full_messages.inspect if params[:user] @user.state = params[:user][:state] success = success & @user.save end logger.debug "--------------------LANG_ERRORS-------------102----------" + lang_errors.full_messages.inspect if lang_errors.full_messages.empty? @userวัตถุเพิ่มข้อผิดพลาดให้กับlang_errorsตัวแปรในupdate_lanugagesวิธีการ เมื่อฉันทำการบันทึกบน@userวัตถุฉันสูญเสียข้อผิดพลาดที่เก็บไว้ในlang_errorsตัวแปรเริ่มแรก แม้ว่าสิ่งที่ฉันพยายามทำจะเป็นมากกว่าแฮ็ค (ซึ่งดูเหมือนจะไม่ทำงาน) ฉันต้องการที่จะเข้าใจว่าทำไมค่าตัวแปรจึงถูกล้างออก ฉันเข้าใจการอ้างอิงผ่านดังนั้นฉันอยากทราบว่าค่าสามารถเก็บไว้ในตัวแปรนั้นได้อย่างไรโดยไม่ถูกชะล้างออกไป

7
ผ่านวัตถุโดยการอ้างอิงหรือค่าใน C #
ใน C # ฉันคิดเสมอว่าตัวแปรที่ไม่ใช่ดั้งเดิมถูกส่งผ่านโดยการอ้างอิงและค่าดั้งเดิมที่ส่งผ่านตามค่า ดังนั้นเมื่อผ่านไปยังวิธีการใด ๆ ที่ไม่ใช่วัตถุดั้งเดิมสิ่งที่ทำกับวัตถุในวิธีการจะมีผลต่อวัตถุที่ถูกส่งผ่าน (สิ่ง C # 101) อย่างไรก็ตามฉันได้สังเกตเห็นว่าเมื่อฉันส่งวัตถุ System.Drawing.Image ว่าดูเหมือนจะไม่เป็นเช่นนั้น? ถ้าฉันส่งวัตถุ system.drawing.image ไปยังวิธีอื่นแล้วโหลดรูปภาพไปยังวัตถุนั้นให้ปล่อยให้วิธีนั้นพ้นขอบเขตแล้วกลับไปที่วิธีการเรียกใช้อิมเมจนั้นจะไม่ถูกโหลดบนวัตถุดั้งเดิม? ทำไมนี้

7
มีประโยชน์ในการผ่านโดยตัวชี้ไปผ่านโดยอ้างอิงใน C ++?
ประโยชน์ของการผ่านโดยตัวชี้ผ่านการอ้างอิงใน C ++ คืออะไร เมื่อเร็ว ๆ นี้ฉันได้เห็นตัวอย่างจำนวนมากที่เลือกการส่งผ่านอาร์กิวเมนต์ของพอยน์เตอร์แทนที่จะส่งผ่านการอ้างอิง มีประโยชน์ในการทำเช่นนี้? ตัวอย่าง: func(SPRITE *x); ด้วยการโทร func(&mySprite); เมื่อเทียบกับ func(SPRITE &x); ด้วยการโทร func(mySprite);

13
ผ่านคุณสมบัติโดยการอ้างอิงใน C #
Наэтотвопросестьответына Stack Overflow нарусском : ภาษา: คำอธิบาย ฉันกำลังพยายามทำสิ่งต่อไปนี้: GetString( inputString, ref Client.WorkPhone) private void GetString(string inValue, ref string outValue) { if (!string.IsNullOrEmpty(inValue)) { outValue = inValue; } } นี่ทำให้ฉันมีข้อผิดพลาดในการคอมไพล์ ฉันคิดว่ามันชัดเจนว่าฉันพยายามทำอะไร โดยทั่วไปฉันต้องการGetStringคัดลอกเนื้อหาของสตริงการป้อนข้อมูลให้กับทรัพย์สินของWorkPhoneClient เป็นไปได้หรือไม่ที่จะส่งทรัพย์สินโดยอ้างอิง?

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