คำถามติดแท็ก scope

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

8
ขอบเขตของตัวแปรที่เริ่มต้นในคำสั่ง if คืออะไร
ฉันใหม่กับ Python ดังนั้นนี่อาจเป็นคำถามที่ง่าย รหัสต่อไปนี้ในไฟล์ Python (โมดูล) ทำให้ฉันสับสนเล็กน้อย: if __name__ == '__main__': x = 1 print x ในภาษาอื่น ๆ ที่ฉันเคยทำงานรหัสนี้จะทำให้เกิดข้อยกเว้นเนื่องจากxตัวแปรอยู่ในifคำสั่งและไม่ควรอยู่นอก แต่รหัสนี้ทำงานและพิมพ์ 1. ทุกคนสามารถอธิบายพฤติกรรมนี้ได้หรือไม่? ตัวแปรทั้งหมดถูกสร้างในโมดูลโกลบอล / มีให้สำหรับโมดูลทั้งหมดหรือไม่?

10
เหตุใดจึงต้องใช้วิธีสาธารณะในชั้นเรียนภายใน
มีรหัสจำนวนมากในหนึ่งในโครงการของเราที่มีลักษณะดังนี้: internal static class Extensions { public static string AddFoo(this string s) { if (s == null) { return "Foo"; } return $({s}Foo); } } มีเหตุผลที่ชัดเจนในการทำสิ่งนี้นอกเหนือจาก "ง่ายกว่าที่จะทำให้เป็นสาธารณะในภายหลัง" ฉันสงสัยว่ามันสำคัญเฉพาะในกรณีขอบแปลก ๆ (การสะท้อนใน Silverlight) หรือไม่เลย
250 c#  scope  public  internals 

6
ขีดล่างนำหน้าสำหรับชื่อคุณสมบัติและเมธอดใน JavaScript
คำนำหน้าขีดล่างใน JavaScript มีเพียงแบบแผนเท่านั้นตัวอย่างเช่นในวิธีการเรียนแบบส่วนตัวของ Python คืออะไร? จากเอกสาร 2.7 Python: ตัวแปรอินสแตนซ์“ ส่วนตัว” ที่ไม่สามารถเข้าถึงได้ยกเว้นจากภายในวัตถุไม่มีอยู่ใน Python อย่างไรก็ตามมีการประชุมที่ตามด้วยรหัส Python ส่วนใหญ่: ชื่อที่นำหน้าด้วยเครื่องหมายขีดล่าง (เช่น _spam) ควรได้รับการปฏิบัติเสมือนเป็นส่วนที่ไม่เปิดเผยต่อสาธารณะของ API (ไม่ว่าจะเป็นฟังก์ชันวิธีการหรือสมาชิกข้อมูล) . สิ่งนี้ใช้กับ JavaScript ได้หรือไม่ ยกตัวอย่างโค้ด JavaScript นี้: function AltTabPopup() { this._init(); } AltTabPopup.prototype = { _init : function() { ... } } นอกจากนี้ยังใช้ตัวแปรนำหน้าขีดล่าง ... this._currentApp = 0; this._currentWindow = …

8
เป็นไปได้ไหมที่จะประกาศสองตัวแปรของชนิดที่แตกต่างกันใน for for loop
เป็นไปได้ไหมที่จะประกาศสองตัวแปรที่มีชนิดต่างกันในเนื้อความการเริ่มต้นของ for for loop ใน C ++? ตัวอย่างเช่น: for(int i=0,j=0 ... กำหนดจำนวนเต็มสองจำนวน ฉันสามารถนิยามinta และ a charในส่วนเริ่มต้นได้หรือไม่? สิ่งนี้จะเกิดขึ้นได้อย่างไร?

9
เป็นไปได้หรือไม่ที่จะกำหนดมากกว่าหนึ่งฟังก์ชั่นต่อไฟล์ใน MATLAB และเข้าถึงได้จากภายนอกไฟล์นั้น?
เมื่อฉันเรียนระดับปริญญาตรีของฉันใน EE MATLAB ต้องการให้แต่ละฟังก์ชั่นกำหนดไว้ในไฟล์ของตัวเองแม้ว่ามันจะเป็นแบบเส้นเดียวก็ตาม ตอนนี้ฉันกำลังเรียนระดับบัณฑิตศึกษาและฉันต้องเขียนโครงการใน MATLAB นี่ยังเป็นข้อกำหนดสำหรับ MATLAB รุ่นใหม่กว่าหรือไม่ หากเป็นไปได้ที่จะวางฟังก์ชั่นมากกว่าหนึ่งไฟล์ไว้ในไฟล์มีข้อ จำกัด ในเรื่องนี้หรือไม่? ตัวอย่างเช่นฟังก์ชั่นทั้งหมดในไฟล์สามารถเข้าถึงได้จากภายนอกไฟล์หรือเฉพาะฟังก์ชั่นที่มีชื่อเดียวกับไฟล์? หมายเหตุ: ฉันใช้ MATLAB รีลีส R2007b

5
ฉันจะส่งผ่านบริบทนี้ไปยังฟังก์ชันได้อย่างไร
ฉันคิดว่านี่จะเป็นสิ่งที่ฉันสามารถทำได้อย่างง่ายดาย google แต่บางทีฉันไม่ได้ถามคำถามที่ถูกต้อง ... ฉันจะตั้งค่าสิ่งใด "สิ่งนี้" ในฟังก์ชันจาวาสคริปต์ที่กำหนดได้อย่างไร ตัวอย่างเช่นชอบฟังก์ชั่นส่วนใหญ่ของ jQuery เช่น: $(selector).each(function() { //$(this) gives me access to whatever selector we're on }); ฉันจะเขียน / เรียกใช้ฟังก์ชันสแตนด์อโลนของตัวเองที่มีการอ้างอิง "นี่" ที่เหมาะสมเมื่อถูกเรียกได้อย่างไร ฉันใช้ jQuery ดังนั้นหากมีวิธีเฉพาะในการทำ jQuery นั่นจะเหมาะอย่างยิ่ง
213 javascript  jquery  scope  this 

12
UnboundLocalError บนตัวแปรโลคัลเมื่อกำหนดใหม่หลังจากการใช้ครั้งแรก
รหัสต่อไปนี้ทำงานได้ตามที่คาดไว้ใน Python 2.5 และ 3.0: a, b, c = (1, 2, 3) print(a, b, c) def test(): print(a) print(b) print(c) # (A) #c+=1 # (B) test() แต่เมื่อฉันสาย uncomment (B) , ฉันได้รับUnboundLocalError: 'c' not assignedที่เส้น(A) ค่าของaและbถูกพิมพ์อย่างถูกต้อง สิ่งนี้ทำให้ฉันงงงวยอย่างสมบูรณ์ด้วยเหตุผลสองประการ: เหตุใดจึงมีข้อผิดพลาด runtime โยนที่สาย(A)เพราะเป็นคำสั่งในภายหลังบรรทัด(B) ? ทำไมตัวแปรaและbพิมพ์ได้ตามที่คาดไว้ในขณะที่cเกิดข้อผิดพลาด คำอธิบายเดียวที่ฉันสามารถขึ้นมาเป็นที่ท้องถิ่นตัวแปรcถูกสร้างขึ้นโดยได้รับมอบหมายc+=1ซึ่งจะนำแบบอย่างมากกว่าตัวแปร "ทั่วโลก" cแม้กระทั่งก่อนที่ตัวแปรท้องถิ่นจะถูกสร้างขึ้น แน่นอนมันไม่สมเหตุสมผลที่ตัวแปรจะ "ขโมย" ขอบเขตก่อนที่มันจะมีอยู่ มีคนช่วยอธิบายพฤติกรรมนี้ได้ไหม
208 python  variables  scope 

12
ความแตกต่างระหว่าง 'ของฉัน' และ 'ของเรา' ใน Perl คืออะไร?
ฉันรู้ว่าสิ่งที่myอยู่ใน Perl มันกำหนดตัวแปรที่มีอยู่เฉพาะในขอบเขตของบล็อกที่มีการกำหนดไว้ อะไรourทำอย่างไร วิธีการที่ไม่ourแตกต่างจากmy?
188 perl  scope 

3
เข้าถึงตัวแปรที่อยู่นอกขอบเขตของ Handlebars.js แต่ละลูป
ฉันมีแม่แบบ handlebars.js แบบนี้: {{externalValue}} <select name="test"> {{#each myCollection}} <option value="{{id}}">{{title}} {{externalValue}}</option> {{/each}} </select> และนี่คือผลลัพธ์ที่สร้างขึ้น: myExternalValue <select name="test"> <option value="1">First element </option> <option value="2">Second element </option> <option value="3">Third element </option> </select> ตามที่คาดไว้ฉันสามารถเข้าถึงidและtitleฟิลด์ของทุกองค์ประกอบของmyCollectionเพื่อสร้างตัวเลือกของฉัน และนอกการเลือกexternalValueตัวแปรของฉันจะถูกพิมพ์อย่างถูกต้อง ("myExternalValue") น่าเสียดายที่ในตัวเลือก 'ข้อความexternalValueค่าจะไม่ถูกพิมพ์ออกมา คำถามของฉันคือฉันจะเข้าถึงตัวแปรนอกขอบเขตของแฮนด์บาร์แต่ละอันจากภายในลูปได้อย่างไร

7
ตัวแปรที่ถูกแก้ไขภายในลูป while ไม่ได้ถูกจดจำ
ในโปรแกรมต่อไปนี้ถ้าฉันตั้งค่าตัวแปร$fooเป็นค่า 1 ภายในifคำสั่งแรกมันจะทำงานในแง่ที่ว่าค่านั้นถูกจดจำหลังจากคำสั่ง if อย่างไรก็ตามเมื่อฉันตั้งค่าตัวแปรเดียวกันเป็นค่า 2 ภายในคำสั่งifที่อยู่ในwhileคำสั่งมันจะถูกลืมหลังจากwhileวนรอบ มันทำงานเหมือนกับว่าฉันกำลังใช้สำเนาของตัวแปร$fooภายในwhileลูปและฉันกำลังแก้ไขเฉพาะสำเนานั้น นี่คือโปรแกรมทดสอบที่สมบูรณ์: #!/bin/bash set -e set -u foo=0 bar="hello" if [[ "$bar" == "hello" ]] then foo=1 echo "Setting \$foo to 1: $foo" fi echo "Variable \$foo after if statement: $foo" lines="first line\nsecond line\nthird line" echo -e $lines | while read line do …
187 bash  while-loop  scope  sh 

8
var self = นี่?
โดยใช้วิธีการเช่นการเรียกกลับเป็นสำหรับการจัดการเหตุการณ์การเปลี่ยนแปลงขอบเขตของthisจาก"อินสแตนซ์ของฉัน"เพื่อ"สิ่งที่เรียกว่าเพียงแค่โทรกลับ" ดังนั้นรหัสของฉันมีลักษณะเช่นนี้ function MyObject() { this.doSomething = function() { ... } var self = this $('#foobar').bind('click', function(){ self.doSomethng() // this.doSomething() would not work here }) } มันใช้งานได้ แต่เป็นวิธีที่ดีที่สุดที่จะทำหรือไม่ มันดูแปลกสำหรับฉัน


6
การกำหนดขอบเขตใน Python 'เป็น' ลูป
ฉันไม่ได้ถามเกี่ยวกับกฎการกำหนดขอบเขตของไพ ธ อน ฉันเข้าใจโดยทั่วไปว่าการกำหนดขอบเขตทำงานใน Python สำหรับลูป คำถามของฉันคือทำไมการตัดสินใจออกแบบในลักษณะนี้ ตัวอย่างเช่น (ไม่มีการเล่นสำนวนเจตนา): for foo in xrange(10): bar = 2 print(foo, bar) ด้านบนจะพิมพ์ (9,2) สิ่งนี้ทำให้ฉันแปลกประหลาด: 'foo' เป็นเพียงการควบคุมวงและ 'บาร์' ถูกกำหนดไว้ในวง ฉันสามารถเข้าใจได้ว่าทำไมมันอาจจำเป็นสำหรับ 'บาร์' ที่จะสามารถเข้าถึงได้นอกลูป (มิฉะนั้นสำหรับลูปจะมีฟังก์ชันที่ จำกัด มาก) สิ่งที่ฉันไม่เข้าใจคือสาเหตุที่ตัวแปรควบคุมยังคงอยู่ในขอบเขตหลังจากวนออก จากประสบการณ์ของฉันมันเพียงแค่ตัดเนมสเปซส่วนกลางและทำให้การติดตามข้อผิดพลาดที่ล่ามในภาษาอื่น ๆ ทำได้ยากขึ้น
177 python  scope 

5
การเข้าถึงตัวแปรคลาสจากรายการความเข้าใจในการกำหนดคลาส
คุณเข้าถึงตัวแปรคลาสอื่น ๆ ได้อย่างไรจากรายการความเข้าใจภายในนิยามคลาส? การทำงานต่อไปนี้ใน Python 2 แต่ล้มเหลวใน Python 3: class Foo: x = 5 y = [x for i in range(1)] Python 3.2 ให้ข้อผิดพลาด: NameError: global name 'x' is not defined การพยายามFoo.xไม่ทำงานเช่นกัน ความคิดเห็นเกี่ยวกับวิธีการทำเช่นนี้ใน Python 3 ตัวอย่างแรงจูงใจที่ซับซ้อนกว่าเล็กน้อย: from collections import namedtuple class StateDatabase: State = namedtuple('State', ['name', 'capital']) db = [State(*args) …

3
การอ้างอิง: ขอบเขตตัวแปรคืออะไรตัวแปรใดบ้างที่สามารถเข้าถึงได้จากที่ไหนและอะไรคือข้อผิดพลาด“ ตัวแปรที่ไม่ได้กำหนด”
หมายเหตุ: นี่เป็นคำถามอ้างอิงสำหรับการจัดการกับขอบเขตตัวแปรใน PHP โปรดปิดคำถามใด ๆ ที่เหมาะสมกับรูปแบบนี้ซ้ำกับคำถามนี้ "ขอบเขตตัวแปร" ใน PHP คืออะไร? ตัวแปรจากไฟล์. php หนึ่งสามารถเข้าถึงได้ในอีกไฟล์หนึ่งหรือไม่ เหตุใดฉันจึงได้รับข้อผิดพลาด"ตัวแปรที่ไม่ได้กำหนด"
167 php  scope 

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