สิ่งใดที่คุณมีเคล็ดลับทั่วไปสำหรับการเล่นกอล์ฟในD ? ฉันกำลังมองหาแนวคิดที่สามารถนำไปใช้กับปัญหารหัสกอล์ฟโดยทั่วไปซึ่งอย่างน้อยค่อนข้างเฉพาะเจาะจงกับ D (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ) กรุณาโพสต์หนึ่งเคล็ดลับต่อคำตอบ
สิ่งใดที่คุณมีเคล็ดลับทั่วไปสำหรับการเล่นกอล์ฟในD ? ฉันกำลังมองหาแนวคิดที่สามารถนำไปใช้กับปัญหารหัสกอล์ฟโดยทั่วไปซึ่งอย่างน้อยค่อนข้างเฉพาะเจาะจงกับ D (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ) กรุณาโพสต์หนึ่งเคล็ดลับต่อคำตอบ
คำตอบ:
ดูสิไม่มีคำอุปมา!
ฟังก์ชันของ D และฟังก์ชันเทมเพลตสามารถเรียกได้ว่าเป็นค่าวิธีการ (ไม่ช่วย) และคุณสมบัติ
ฉันไม่อยากเชื่อเลยว่าจะไม่มีใครพูดเรื่องนี้ ฉันจะแสดงรายการที่บันทึกไบต์:
fun()และfun!()()ย่อให้สั้นลงfun(สมมติว่าไม่มีตัวแปรfun)fun(par)ย่อให้สั้นลงpar.fun(สมมติว่าparไม่มีคุณสมบัติ / วิธีการfunรวมทั้งparไม่มีการแสดงออกเช่นนี้5+2)fun!(T)() ย่อให้เป็น fun!Tfun!(T)(par)ย่อให้เป็นpar.fun!T(สมมติว่าparไม่มีคุณสมบัติ / วิธีการfun)และด้วยวัตถุ:
new cls()ย่อให้เหลือnew cls(มี JavaScript เพิ่มเติมหรือไม่)obj.fun()และobj.fun!()()ย่อให้สั้นลงobj.funobj.fun!(T)() ย่อให้เป็น obj.fun!Tสิ่งหนึ่งที่สุดท้ายใช้รุ่นเก่า ช่วยให้คุณใช้คุณสมบัติที่เลิกใช้แล้วซึ่งทำให้รหัสของคุณสั้นลง ที่กล่าวว่าคำแนะนำที่ดีที่สุด: D ไม่ดีสำหรับรหัสกอล์ฟ มันเป็นภาษาที่ยอดเยี่ยมไม่ใช่สำหรับรหัส - กอล์ฟ
D คือ JavaScript
เห็นได้ชัดว่าไม่ แต่เมื่อต้องรับมือกับfloat, doubleและreal, nanเป็นค่าซึ่งจะต้องได้รับการจัดการและตามที่ระบุโดย IEEE 754 น่านไม่ได้เปรียบเทียบที่เท่าเทียมกันกับตัวเอง
writeln(double.nan == double.nan); // false
ความหมาย
writeln(value!=value); // only true for nan
สั้นกว่า
import std.math;
writeln(isNaN(value));
เห็นได้ชัดว่ามักจะใช้math.isNaNสำหรับจริงรหัส ;)
D มีการอนุมานประเภทและautoคำหลัก หากวัตถุไม่ได้แสดงintว่าautoอาจสั้นลง
autoทำงานเมื่อมีการสร้างอาเรย์กับKeyType[ValueType]ไวยากรณ์?
auto asd = ["a":1, "b": 2];ทำงานได้ แต่เนื่องจากKeyType[ValueType]จะไปแทนที่autoคำหลักฉันไม่ทราบว่าจะทำงานกับประเภทที่ตัวอักษรไม่สามารถสร้างได้เสมอ
auto arr = ["a": true, "b": 6];ทำงานได้คีย์และค่าจะต้องเป็นประเภทที่เข้ากันได้
D เป็นวิธีการผูกมัดที่ยอดเยี่ยม แต่:
str.toLower.strip().split("").sort();
เป็นเช่นเดียวกับ
sort(split(strip(str.toLower),""));
และโดยปกติแล้วคนที่ไม่ถูกผูกมัดจะสั้นกว่าซึ่งฉันเพิ่งรู้ซึ่งทำให้ฉันสั้นลงคำตอบของฉันเพื่อจัดการถังขยะดังนั้น : D
เช่น C / C ++ mainสามารถเป็นintหรือvoidแต่void main(){}จะสั้นกว่าint main(){return my_func_returning_int;}เสมอ
int main(){return output}สั้นลง?
import std.stdio;void main(){write(7);}เป็นสิ่งที่จำเป็น ฉันสงสัยว่าคำถามจะมอบอำนาจให้โปรแกรมส่งคืนตัวเลขเนื่องจากหลายภาษาไม่สามารถตั้งรหัสส่งคืนได้
D ในฐานะภาษาการเขียนโปรแกรมระบบหลายภาษา (Object Functional) ดูเหมือนว่าจะยอมรับ TIMTOWTDI หรือมีมากกว่าหนึ่งวิธีที่ต้องทำ
ตรงจุดเขียน argv ของโปรแกรม:
import std.stdio, std.array, std.algorithm;
void main(string[] args) {
for(int i=0;i<args.length;writeln(args[i++])){};
foreach(a;args)writeln(a);
each!writeln(args);
}
โปรดสังเกตว่า C-style for-loop ต้องการ{}บล็อกว่างเปล่าและจะไม่ยอมรับเซมิโคลอนหรือไม่มีอะไรเป็นคำสั่งว่างในกรณีนี้ โดยปกติหรือ;ไม่มี ops
char*แทนstringการบันทึกไบต์ได้หรือไม่?
function D main parameters must be main() or main(string[] args)ยิ่งไปกว่านั้นcharก็คือตัวอักษรตัวหนึ่งchar*เป็นตัวชี้ไปที่ตัวอักษรหนึ่งตัวอักษรและchar[]เป็นอาร์เรย์ของตัวอักษรตัวอักษร (สตริงจะแตกต่างกัน) D! = C || C ++
D มีรูปแบบแลมบ์ดา C #-style ไม่กี่แบบซึ่งสามารถกำหนดและยืนอยู่คนเดียว:
(int a,int b)=>a*b;
auto a=(int a,int b)=>a*b;
อย่างไรก็ตามแตกต่างจาก C #, ประเภทของลายเซ็นยังคงมีความจำเป็นเพราะ D ไม่ได้มีการอนุมานประเภทระดับ Haskell
T f(T)(T a,T b){return a + b}ควรอนุมานTว่าint inf(5);
การเรียกฟังก์ชันบนวัตถุที่ไม่มีอาร์กิวเมนต์อื่น
reverse(x);
สามารถตัดให้สั้นลงได้เสมอ
x.reverse;
เพื่อโกนเป็นไบต์หรือมากกว่านั้น
นี่เป็นเพราะการ.ทำให้ LHS เป็นอาร์กิวเมนต์แรกโดยปริยายและการสร้างเทมเพลตให้เราเลือกฟังก์ชันที่เหมาะสมสำหรับ args
x.reverse(y, z)ต่อไปความยาวจะเกิดขึ้นเนื่องจากจุด
x.reverse(y,z)และreverse(x,y,z)มีจำนวนไบต์เดียวกัน
x.reverse(y, z)กับx.reverseหรือยัง
หากคำถามนั้นต้องการโปรแกรมเต็มรูปแบบการmoduleประกาศนั้นไม่จำเป็นอย่างน่าประหลาดใจ
* ไอ * Java ทุกคน? * ล้างคอ * จริงๆแล้วmoduleระบบของ D นั้นเก่ากว่าของ Java