คำถามติดแท็ก string-interpolation

การแก้ไขสตริงคือการแทนที่ลำดับอักขระที่กำหนดไว้ในสตริงด้วยค่าที่กำหนด การแสดงนี้อาจถือได้ว่าใช้งานง่ายสำหรับการจัดรูปแบบและการกำหนดเนื้อหามากกว่าการจัดองค์ประกอบของสตริงและค่าต่างๆโดยใช้ตัวดำเนินการต่อ โดยทั่วไปการแก้ไขสตริงจะใช้เป็นคุณลักษณะของภาษาในภาษาโปรแกรมต่างๆเช่น PHP, Haxe, Perl, Ruby, Python, C # (ณ 6.0) และอื่น ๆ


16
วิธีการสอดแทรกตัวแปรในสตริงใน JavaScript โดยไม่ต้องต่อข้อมูล
ฉันรู้ใน PHP เราสามารถทำสิ่งนี้: $hello = "foo"; $my_string = "I pity the $hello"; เอาท์พุท: "I pity the foo" ฉันสงสัยว่าสิ่งเดียวกันนี้เป็นไปได้ใน JavaScript เช่นกัน การใช้ตัวแปรภายในสตริงโดยไม่ใช้การต่อข้อมูล - มันดูกระชับและสง่างามกว่าในการเขียน

1
วิธีการใช้ผู้ประกอบการที่ประกอบไปด้วยภายในสายแทรก?
ฉันสับสนว่าทำไมรหัสนี้จะไม่รวบรวม: var result = $"{fieldName}{isDescending ? " desc" : string.Empty}"; ถ้าฉันแยกมันก็ใช้งานได้ดี: var desc = isDescending ? " desc" : string.Empty; var result = $"{fieldName}{desc}";

15
PHP - วิธีสร้างอักขระขึ้นบรรทัดใหม่ได้อย่างไร
ใน PHP ฉันพยายามสร้างอักขระขึ้นบรรทัดใหม่: echo $clientid; echo ' '; echo $lastname; echo ' '; echo '\r\n'; หลังจากนั้นฉันเปิดไฟล์ที่สร้างขึ้นใน Notepad และมันเขียนบรรทัดใหม่ตามตัวอักษร: 1 John Doe \ r \ n 1 John Doe \ r \ n 1 John Doe \ r \ n ฉันได้ลองใช้หลายรูปแบบ\r\nแล้ว แต่ก็ไม่ได้ผล เหตุใดการขึ้นบรรทัดใหม่จึงไม่ใช่การขึ้นบรรทัดใหม่


1
คุณใช้สตริงคำต่อคำกับการแก้ไขอย่างไร?
ใน C # 6 มีคุณสมบัติใหม่: สตริงที่ถูกสอดแทรก สิ่งเหล่านี้ช่วยให้คุณสามารถใส่นิพจน์ลงในโค้ดได้โดยตรงแทนที่จะใช้ดัชนี: string s = string.Format("Adding \"{0}\" and {1} to foobar.", x, this.Y()); กลายเป็น: string s = $"Adding \"{x}\" and {this.Y()} to foobar."; อย่างไรก็ตามเรามีสตริงจำนวนมากในหลายบรรทัดโดยใช้สตริงคำต่อคำ (ส่วนใหญ่เป็นคำสั่ง SQL) ดังนี้: string s = string.Format(@"Result... Adding ""{0}"" and {1} to foobar: {2}", x, this.Y(), x.GetLog()); การเปลี่ยนกลับเป็นสตริงปกติดูเหมือนจะยุ่งเหยิง: string s = …


3
การแก้ไขสตริงเทียบกับสตริงรูปแบบ
มีความแตกต่างของประสิทธิภาพที่สังเกตได้ระหว่างการใช้การแก้ไขสตริง: myString += $"{x:x2}"; เทียบกับ String.Format ()? myString += String.Format("{0:x2}", x); ฉันแค่ถามเพราะ Resharper กำลังแจ้งการแก้ไขและฉันเคยโดนหลอกมาก่อน


10
วิธีการเลื่อน / เลื่อนการประเมิน f-strings?
ฉันใช้สตริงเทมเพลตเพื่อสร้างไฟล์บางไฟล์และฉันชอบความกระชับของ f-strings ใหม่เพื่อจุดประสงค์นี้เพื่อลดรหัสเทมเพลตก่อนหน้าของฉันจากสิ่งนี้: template_a = "The current name is {name}" names = ["foo", "bar"] for name in names: print (template_a.format(**locals())) ตอนนี้ฉันทำได้แล้วโดยแทนที่ตัวแปรโดยตรง: names = ["foo", "bar"] for name in names: print (f"The current name is {name}") อย่างไรก็ตามบางครั้งมันก็สมเหตุสมผลที่จะกำหนดเทมเพลตไว้ที่อื่น - สูงขึ้นในโค้ดหรือนำเข้าจากไฟล์หรือบางสิ่ง ซึ่งหมายความว่าเทมเพลตเป็นสตริงแบบคงที่ที่มีแท็กการจัดรูปแบบอยู่ในนั้น จะต้องมีบางอย่างเกิดขึ้นกับสตริงเพื่อบอกให้ล่ามแปลความหมายของสตริงเป็นสตริง f ใหม่ แต่ฉันไม่รู้ว่ามีสิ่งนั้นหรือไม่ มีวิธีใดบ้างในการนำสตริงเข้ามาและตีความว่าเป็น f-string เพื่อหลีกเลี่ยงการใช้การ.format(**locals())โทร? ตามหลักการแล้วฉันต้องการโค้ดแบบนี้ ... ( magic_fstring_functionส่วนที่ฉันไม่เข้าใจอยู่ที่ไหน): …

4
คุณสามารถใช้คุณสมบัติของวัตถุในสตริงที่ยกมาสองครั้งได้อย่างไร?
ฉันมีรหัสต่อไปนี้: $DatabaseSettings = @(); $NewDatabaseSetting = "" | select DatabaseName, DataFile, LogFile, LiveBackupPath; $NewDatabaseSetting.DatabaseName = "LiveEmployees_PD"; $NewDatabaseSetting.DataFile = "LiveEmployees_PD_Data"; $NewDatabaseSetting.LogFile = "LiveEmployees_PD_Log"; $NewDatabaseSetting.LiveBackupPath = '\\LiveServer\LiveEmployeesBackups'; $DatabaseSettings += $NewDatabaseSetting; เมื่อฉันพยายามใช้คุณสมบัติอย่างใดอย่างหนึ่งในคำสั่ง string execute: & "$SQlBackupExePath\SQLBackupC.exe" -I $InstanceName -SQL ` "RESTORE DATABASE $DatabaseSettings[0].DatabaseName FROM DISK = '$tempPath\$LatestFullBackupFile' WITH NORECOVERY, REPLACE, MOVE '$DataFileName' TO …

1
เหตุใดการแก้ไขสตริงจึงทำงานใน Ruby เมื่อไม่มีวงเล็บปีกกา
วิธีที่เหมาะสมในการใช้การแก้ไขสตริงใน Ruby มีดังนี้: name = "Ned Stark" puts "Hello there, #{name}" #=> "Hello there, Ned Stark" นั่นคือวิธีที่ฉันตั้งใจจะใช้มันเสมอ อย่างไรก็ตามฉันสังเกตเห็นบางอย่างแปลก ๆในการแก้ไขสตริงของทับทิม ฉันสังเกตเห็นว่าการแก้ไขสตริงทำงานใน Ruby โดยไม่มีวงเล็บปีกกาเกี่ยวกับตัวแปรอินสแตนซ์ ตัวอย่างเช่น: @name = "Ned Stark" puts "Hello there, #@name" #=> "Hello there, Ned Stark" และการลองสิ่งเดียวกับตัวแปรที่ไม่ใช่อินสแตนซ์ไม่ได้ผล name = "Ned Stark" puts "Hello, there, #name" #=> "Hello there, #name" ฉันได้ลองแล้วประสบความสำเร็จทั้งใน …

8
วิธีแก้ปัญหา“ การแก้ไขสตริงสร้างคำอธิบายการดีบักสำหรับค่าที่เป็นทางเลือก คุณตั้งใจที่จะทำให้มันชัดเจนหรือไม่” ใน Xcode 8.3 beta?
ตั้งแต่เบต้า 8.3 เป็นต้นไปคำเตือน zillions "การแก้ไขสตริงจะสร้างคำอธิบายการดีบักสำหรับค่าที่ไม่บังคับคุณตั้งใจจะทำให้สิ่งนี้ชัดเจนหรือไม่" ปรากฏในรหัสของฉัน ตัวอย่างเช่นคำเตือนปรากฏขึ้นในสถานการณ์ต่อไปนี้ซึ่งตัวเลือกอาจนำไปสู่ศูนย์: let msg = "*** Error \(options["taskDescription"]): cannot load \(sUrl) \(error)" ตามที่ออกแบบไว้ก่อนหน้านี้ฉัน (และคอมไพเลอร์) ก็โอเคสำหรับฉันที่จะแก้ไขตัวเลือกเป็น 'ศูนย์' แต่คอมไพเลอร์เปลี่ยนใจ สิ่งที่คอมไพเลอร์แนะนำคือการเพิ่มตัวสร้างสตริงพร้อมคำอธิบายดังนี้: let msg = "*** Error \(String(describing: options["taskDescription"])): cannot load \(sUrl) \(error)" เห็นได้ชัดว่าผลลัพธ์นั้นชัดเจน แต่ก็ยุ่งยากมากในความคิดของฉัน มีตัวเลือกที่ดีกว่านี้หรือไม่? ฉันต้องแก้ไขคำเตือนเหล่านั้นทั้งหมดหรือดีกว่ารอเบต้าถัดไป

7
จะใช้อักขระ Escape กับการแก้ไขสตริงใน C # 6 ได้อย่างไร
ฉันใช้การแก้ไขสตริงและชอบมันมาก แต่ฉันมีปัญหาที่ฉันพยายามรวมแบ็กสแลชในผลลัพธ์ของฉัน แต่ไม่สามารถทำให้มันใช้งานได้ อยากได้อะไรแบบนี้ .. var domain = "mydomain"; var userName = "myUserName"; var combo = $"{domain}\{userName}" ฉันต้องการให้ผลลัพธ์ของคำสั่งผสมเป็น myDomain\myUserName สิ่งที่ฉันได้รับคือข้อผิดพลาดทางไวยากรณ์เกี่ยวกับ \ เป็นอักขระหลีก ถ้าฉันใส่ \\ ข้อผิดพลาด snytax จะหายไป แต่ผลลัพธ์คือ myDomain \\ myUsername ฉันจะรวมอักขระที่ใช้ Escape ไว้ในสตริงที่ถูกแก้ไขได้อย่างไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.