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

ความไม่เปลี่ยนรูปคือความไม่สามารถแก้ไขข้อมูลได้หลังจากสร้างขึ้นแล้ว การแก้ไขจะทำโดยการคัดลอกข้อมูลแทน คุณสมบัติของข้อมูลที่ไม่เปลี่ยนรูปคือ * โปร่งใสอ้างอิงได้ *

27
ลบอักขระเฉพาะจากสตริงใน Python
ฉันกำลังพยายามลบอักขระเฉพาะจากสตริงโดยใช้ Python นี่คือรหัสที่ฉันใช้อยู่ตอนนี้ น่าเสียดายที่มันไม่ได้ทำอะไรกับสตริง for char in line: if char in " ?.!/;:": line.replace(char,'') ฉันจะทำสิ่งนี้อย่างถูกต้องได้อย่างไร

10
เหตุใดจึงใช้เครื่องหมายอัศเจรีย์ในเมธอด Ruby
ในทับทิมบางวิธีมีเครื่องหมายคำถาม ( ?) ที่ถามคำถามเช่นinclude?นั้นหากถามว่าวัตถุที่เป็นปัญหานั้นรวมอยู่ด้วยสิ่งนี้จะส่งกลับค่าจริง / เท็จ แต่ทำไมบางวิธีจึงมีเครื่องหมายอัศเจรีย์ ( !) ที่คนอื่นไม่มี มันหมายความว่าอะไร?

16
ทำไมการเปลี่ยนแปลงที่ไม่แน่นอนของ“ ความชั่วร้าย”?
การติดตามการสนทนาที่นี่ดังนั้นฉันได้อ่านหลายครั้งแล้วคำพูดที่ว่าโครงสร้างที่ไม่แน่นอนเป็น "ความชั่วร้าย" (เช่นในคำตอบของคำถามนี้) ปัญหาที่เกิดขึ้นจริงกับความไม่แน่นอนและ structs ใน C # คืออะไร?

17
สิ่งที่ไม่เปลี่ยนแปลงหมายถึงอะไร?
นี่อาจเป็นคำถามที่โง่ที่สุดที่เคยถาม แต่ฉันคิดว่ามันค่อนข้างสับสนสำหรับมือใหม่จาวา ใครสามารถอธิบายสิ่งที่มีความหมายโดยไม่เปลี่ยนรูป ? ทำไมถึงStringไม่เปลี่ยนรูป อะไรคือข้อดี / ข้อเสียของวัตถุที่ไม่เปลี่ยนรูป? ทำไมวัตถุที่ไม่แน่นอนเช่นStringBuilderที่ต้องการมากกว่าสตริงและข้อรอง? ตัวอย่างที่ดี (ใน Java) จะได้รับการชื่นชมจริงๆ

15
สตริง Java ไม่เปลี่ยนรูปจริงๆหรือ
เราทุกคนรู้ว่าStringไม่เปลี่ยนรูปแบบใน Java แต่ตรวจสอบรหัสต่อไปนี้: String s1 = "Hello World"; String s2 = "Hello World"; String s3 = s1.substring(6); System.out.println(s1); // Hello World System.out.println(s2); // Hello World System.out.println(s3); // World Field field = String.class.getDeclaredField("value"); field.setAccessible(true); char[] value = (char[])field.get(s1); value[6] = 'J'; value[7] = 'a'; value[8] = 'v'; value[9] = 'a'; value[10] …

17
Const ใน JavaScript: ควรใช้เมื่อใดและจำเป็นหรือไม่
ฉันเพิ่งเจอconstคำสำคัญใน JavaScript จากสิ่งที่ฉันสามารถบอกได้มันถูกใช้เพื่อสร้างตัวแปรที่ไม่เปลี่ยนรูปแบบและฉันได้ทดสอบเพื่อให้แน่ใจว่าไม่สามารถนิยามใหม่ได้ (ใน Node.js): const x = 'const'; const x = 'not-const'; // Will give an error: 'constant 'x' has already been defined' ฉันรู้ว่ามันยังไม่ได้มาตรฐานบนเบราว์เซอร์ทั้งหมด - แต่ฉันสนใจเฉพาะในบริบทของNode.js V8และฉันสังเกตเห็นว่าผู้พัฒนา / โครงการบางอย่างดูเหมือนจะให้ความสำคัญอย่างยิ่งเมื่อvarสามารถใช้คำหลักกับ ผลกระทบเดียวกัน ดังนั้นคำถามของฉันคือ: เมื่อไรที่มันจะเหมาะสมที่จะใช้constในสถานที่ของvar? ควรใช้ทุกครั้งที่มีการประกาศตัวแปรที่ไม่ได้ถูกกำหนดใหม่หรือไม่? จริง ๆ แล้วมันสร้างความแตกต่างถ้าvarมีการใช้ในสถานที่ของ constหรือในทางกลับกัน?

30
ชื่อที่ดีที่สุดสำหรับวิธี“ เพิ่ม” ที่ไม่กลายพันธุ์ในคอลเลกชันที่ไม่เปลี่ยนรูปแบบคืออะไร
ขออภัยสำหรับชื่อวาฟเฟิล - ถ้าฉันสามารถสร้างชื่อที่กระชับได้ฉันไม่ต้องถามคำถาม สมมติว่าฉันมีประเภทรายการที่ไม่เปลี่ยนรูป มันมีการดำเนินงานFoo(x)ที่ส่งกลับรายการที่ไม่เปลี่ยนรูปใหม่ที่มีข้อโต้แย้งที่ระบุว่าเป็นองค์ประกอบพิเศษในตอนท้าย ดังนั้นเพื่อสร้างรายการของสตริงที่มีค่า "Hello", "immutable", "world" คุณสามารถเขียน: var empty = new ImmutableList<string>(); var list1 = empty.Foo("Hello"); var list2 = list1.Foo("immutable"); var list3 = list2.Foo("word"); (นี่คือรหัส C # และฉันสนใจคำแนะนำ C # มากที่สุดหากคุณรู้สึกว่าภาษามีความสำคัญไม่ใช่คำถามทางภาษา แต่พื้นฐานของภาษาอาจมีความสำคัญ) สิ่งสำคัญคือรายการที่มีอยู่จะไม่เปลี่ยนแปลงโดยFooดังนั้นempty.Countจะยังคงกลับ 0 อีกวิธีหนึ่ง (สำนวนมากขึ้น) ของการบรรลุผลจะเป็น: var list = new ImmutableList<string>().Foo("Hello") .Foo("immutable") .Foo("word"); คำถามของฉันคืออะไรชื่อที่ดีที่สุดสำหรับ Foo คืออะไร? …

3
ความคิดเห็น“ Frozen_string_literal: true” ทำอะไรได้บ้าง
นี่คือrspecbinstub ในไดเรกทอรีโครงการของฉัน #!/usr/bin/env ruby begin load File.expand_path("../spring", __FILE__) rescue LoadError end # frozen_string_literal: true # # This file was generated by Bundler. # # The application 'rspec' is installed as part of a gem, and # this file is here to facilitate running it. # require "pathname" ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", …

26
การเปลี่ยนไม่ได้ของสตริงใน Java
ลองพิจารณาตัวอย่างต่อไปนี้ String str = new String(); str = "Hello"; System.out.println(str); //Prints Hello str = "Help!"; System.out.println(str); //Prints Help! ตอนนี้ใน Java วัตถุ String จะไม่เปลี่ยนรูป ถ้าอย่างนั้นทำไมวัตถุstrจึงสามารถกำหนดค่า "Help!" สิ่งนี้ไม่ขัดแย้งกับความไม่เปลี่ยนแปลงของสตริงใน Java ใช่ไหม ใครช่วยอธิบายแนวคิดเรื่องการเปลี่ยนไม่ได้ของฉันให้ฉันหน่อยได้ไหม แก้ไข: ตกลง. ตอนนี้ฉันได้รับแล้ว แต่มีเพียงคำถามติดตามหนึ่งข้อ เกี่ยวกับรหัสต่อไปนี้: String str = "Mississippi"; System.out.println(str); // prints Mississippi str = str.replace("i", "!"); System.out.println(str); // prints M!ss!ss!pp! …

11
ความแตกต่างระหว่างการคัดลอกตื้นลึกและการดำเนินการมอบหมายปกติคืออะไร?
import copy a = "deepak" b = 1, 2, 3, 4 c = [1, 2, 3, 4] d = {1: 10, 2: 20, 3: 30} a1 = copy.copy(a) b1 = copy.copy(b) c1 = copy.copy(c) d1 = copy.copy(d) print("immutable - id(a)==id(a1)", id(a) == id(a1)) print("immutable - id(b)==id(b1)", id(b) == id(b1)) print("mutable …

11
เหตุใดการเปลี่ยนแปลงไม่ได้จึงสำคัญ (หรือจำเป็น) ใน JavaScript
ฉันกำลังทำงานกับReact JSและReact Native framework ในช่วงครึ่งทางฉันพบว่า Immutability หรือห้องสมุด Immutable -JSเมื่อฉันอ่านเกี่ยวกับการใช้ Flux และ Redux ของ Facebook คำถามคือทำไมการไม่เปลี่ยนรูปจึงสำคัญมาก? เกิดอะไรขึ้นในการกลายพันธุ์วัตถุ? มันไม่ได้ทำให้สิ่งต่าง ๆ ง่ายขึ้น? ยกตัวอย่างให้เราพิจารณาแอพอ่านข่าวแบบง่ายโดยมีหน้าจอเปิดเป็นมุมมองรายการของหัวข้อข่าว หากฉันตั้งค่าให้บอกว่าอาร์เรย์ของวัตถุที่มีค่าเริ่มต้นฉันไม่สามารถจัดการมันได้ นั่นคือสิ่งที่หลักการเปลี่ยนแปลงไม่ได้พูดว่าใช่มั้ย (แก้ไขให้ถูกต้องหากฉันทำผิด) แต่จะเกิดอะไรขึ้นถ้าฉันมีวัตถุข่าวใหม่ที่ต้องได้รับการปรับปรุง ในกรณีปกติฉันสามารถเพิ่มวัตถุลงในอาร์เรย์ได้ ฉันจะประสบความสำเร็จในกรณีนี้ได้อย่างไร ลบร้านค้าและสร้างใหม่หรือไม่ การเพิ่มวัตถุลงในอาร์เรย์เป็นการดำเนินการที่ไม่แพงหรือไม่

24
วิธีสร้างวัตถุที่ไม่เปลี่ยนรูปใน Python
แม้ว่าฉันไม่เคยต้องการสิ่งนี้ แต่ก็ทำให้ฉันรู้สึกว่าการสร้างวัตถุที่ไม่เปลี่ยนรูปใน Python อาจเป็นเรื่องยุ่งยากเล็กน้อย คุณไม่สามารถลบล้าง__setattr__ได้เนื่องจากคุณไม่สามารถกำหนดแอตทริบิวต์ในไฟล์__init__. Subclassing tuple เป็นเคล็ดลับที่ใช้ได้ผล: class Immutable(tuple): def __new__(cls, a, b): return tuple.__new__(cls, (a, b)) @property def a(self): return self[0] @property def b(self): return self[1] def __str__(self): return "<Immutable {0}, {1}>".format(self.a, self.b) def __setattr__(self, *ignored): raise NotImplementedError def __delattr__(self, *ignored): raise NotImplementedError แต่แล้วคุณมีการเข้าถึงaและbตัวแปรผ่านself[0]และself[1]ซึ่งเป็นที่น่ารำคาญ เป็นไปได้ไหมใน Pure Python ถ้าไม่ฉันจะใช้นามสกุล …

16
ประเภทไม่เปลี่ยนรูป vs ไม่แน่นอน
ฉันสับสนในสิ่งที่ไม่เปลี่ยนรูปแบบ ฉันรู้ว่าfloatวัตถุนั้นถือว่าไม่เปลี่ยนรูปพร้อมกับตัวอย่างประเภทนี้จากหนังสือของฉัน: class RoundFloat(float): def __new__(cls, val): return float.__new__(cls, round(val, 2)) สิ่งนี้ถือว่าไม่เปลี่ยนรูปเนื่องจากโครงสร้างคลาส / ลำดับชั้นหรือไม่ความหมายfloatอยู่ที่ด้านบนสุดของคลาสและเป็นการเรียกเมธอดของตัวเอง คล้ายกับตัวอย่างประเภทนี้ (แม้ว่าหนังสือของฉันบอกว่าdictไม่แน่นอน): class SortedKeyDict(dict): def __new__(cls, val): return dict.__new__(cls, val.clear()) ในขณะที่บางสิ่งบางอย่างไม่แน่นอนมีวิธีการภายในชั้นเรียนด้วยตัวอย่างประเภทนี้: class SortedKeyDict_a(dict): def example(self): return self.keys() และสำหรับสุดท้ายclass(SortedKeyDict_a)หากฉันผ่านการตั้งค่าประเภทนี้: d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2)) โดยไม่ต้องเรียกexampleเมธอดมันจะส่งคืนพจนานุกรม SortedKeyDictกับ__new__ธงว่ามันเป็นข้อผิดพลาด ฉันลองส่งจำนวนเต็มไปที่RoundFloatชั้นเรียนด้วย__new__และมันก็ไม่มีข้อผิดพลาด

8
ทำไม tuples มีรายการที่ไม่แน่นอน
ถ้า tuple ไม่เปลี่ยนรูปแล้วทำไมมันถึงมีรายการที่เปลี่ยนแปลงได้? ดูเหมือนจะขัดแย้งกันว่าเมื่อรายการที่ไม่แน่นอนเช่นรายการได้รับการแก้ไข tuple มันเป็นของการรักษาไม่เปลี่ยนรูป

11
วัตถุที่เปลี่ยนแปลงไม่ได้และไม่เปลี่ยนรูป
ฉันพยายามที่จะทำให้หัวของฉันอยู่กับวัตถุที่เปลี่ยนแปลงไม่ได้ การใช้วัตถุที่ไม่แน่นอนได้รับการกดไม่ดีจำนวนมาก (เช่นการคืนค่าสตริงจากวิธีการ) แต่ฉันมีปัญหาในการทำความเข้าใจว่าผลกระทบด้านลบนั้นเป็นอย่างไร แนวปฏิบัติที่เหมาะสมที่สุดในการใช้วัตถุที่ไม่แน่นอนคืออะไร คุณควรหลีกเลี่ยงพวกเขาเมื่อใดก็ตามที่เป็นไปได้?

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