คำถามติดแท็ก private-methods

30
วิธีส่วนตัวของ JavaScript
ในการสร้างคลาส JavaScript ด้วยวิธีสาธารณะฉันจะทำสิ่งที่ชอบ: function Restaurant() {} Restaurant.prototype.buy_food = function(){ // something here } Restaurant.prototype.use_restroom = function(){ // something here } ด้วยวิธีนี้ผู้ใช้ในชั้นเรียนของฉันสามารถ: var restaurant = new Restaurant(); restaurant.buy_food(); restaurant.use_restroom(); ฉันจะสร้างวิธีส่วนตัวที่สามารถเรียกใช้โดยbuy_foodและuse_restroomวิธีการ แต่ไม่ภายนอกโดยผู้ใช้ของชั้นเรียนได้อย่างไร ในคำอื่น ๆ ฉันต้องการใช้วิธีการของฉันสามารถทำได้: Restaurant.prototype.use_restroom = function() { this.private_stuff(); } แต่สิ่งนี้ไม่ได้ผล: var r = new Restaurant(); r.private_stuff(); ฉันจะกำหนดprivate_stuffเป็นวิธีส่วนตัวได้อย่างไรเพื่อให้การพักทั้งสองนี้เป็นจริง ฉันได้อ่านการเขียนของ Doug Crockfordสองสามครั้ง …

11
ฉันจะใช้การสะท้อนกลับเพื่อเรียกใช้วิธีการส่วนตัวได้อย่างไร
มีกลุ่มของวิธีการส่วนตัวในชั้นเรียนของฉันและฉันจำเป็นต้องเรียกวิธีการหนึ่งแบบไดนามิกขึ้นอยู่กับค่าการป้อนข้อมูล ทั้งรหัสการเรียกใช้และวิธีการเป้าหมายอยู่ในอินสแตนซ์เดียวกัน รหัสมีลักษณะดังนี้: MethodInfo dynMethod = this.GetType().GetMethod("Draw_" + itemType); dynMethod.Invoke(this, new object[] { methodParams }); ในกรณีนี้GetMethod()จะไม่ส่งคืนวิธีการส่วนตัว สิ่งที่BindingFlagsผมจะต้องจ่ายให้กับGetMethod()เพื่อที่จะสามารถหาวิธีเอกชน?

11
เหตุใดจึงไม่เรียกเมธอด public const เมื่อ non-const เป็นแบบส่วนตัว
พิจารณารหัสนี้: struct A { void foo() const { std::cout << "const" << std::endl; } private: void foo() { std::cout << "non - const" << std::endl; } }; int main() { A a; a.foo(); } ข้อผิดพลาดของคอมไพเลอร์คือ: ข้อผิดพลาด: 'void A :: foo ()' is private` แต่เมื่อฉันลบไพรเวตมันก็ใช้ได้ เหตุใดจึงไม่เรียกเมธอด public const เมื่อ non-const เป็นแบบส่วนตัว …

9
วิธีโมดูลส่วนตัวใน Ruby
ฉันมีคำถามสองส่วน ปฏิบัติที่ดีที่สุด ฉันมีอัลกอริทึมที่ดำเนินการบางอย่างกับโครงสร้างข้อมูลโดยใช้อินเทอร์เฟซสาธารณะ ปัจจุบันเป็นโมดูลที่มีวิธีการแบบคงที่จำนวนมากซึ่งเป็นแบบส่วนตัวทั้งหมดยกเว้นวิธีการเชื่อมต่อสาธารณะเพียงวิธีเดียว มีตัวแปรอินสแตนซ์หนึ่งตัวที่ต้องใช้ร่วมกันระหว่างวิธีการทั้งหมด นี่คือตัวเลือกที่ฉันเห็นซึ่งดีที่สุด: โมดูลที่มีวิธีการแบบคงที่ ('โมดูล' ในทับทิม) คลาสด้วยวิธีการคงที่ โมดูลMixinสำหรับรวมไว้ในโครงสร้างข้อมูล Refactorออกเป็นส่วนหนึ่งของขั้นตอนวิธีที่ปรับเปลี่ยนโครงสร้างข้อมูล (เล็กมาก) และให้ที่ mixin ที่เรียกวิธีการคงที่ของโมดูลอัลกอริทึมที่ ส่วนทางเทคนิค มีวิธีใดในการสร้างเมธอด Private Moduleหรือไม่? module Thing def self.pub; puts "Public method"; end private def self.priv; puts "Private method"; end end privateในนั้นดูเหมือนจะไม่ได้มีผลกระทบใด ๆก็ยังสามารถเรียกThing.privโดยไม่มีปัญหา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.