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

Scala เป็นภาษาการเขียนโปรแกรมที่ใช้งานทั่วไปโดยมีเป้าหมายหลักที่ Java Virtual Machine ออกแบบมาเพื่อแสดงรูปแบบการเขียนโปรแกรมทั่วไปในรูปแบบที่กระชับสง่างามและปลอดภัยในการใช้งาน คุณสมบัติที่สำคัญของมันคือ: ระบบประเภทคงที่ขั้นสูงที่มีการอนุมานประเภท; ประเภทฟังก์ชั่น รูปแบบจับคู่; พารามิเตอร์และการแปลงโดยนัย ผู้ประกอบการมากไป; การทำงานร่วมกันอย่างสมบูรณ์กับ Java; เห็นพ้องด้วย

8
จะรอ Futures หลาย ๆ ตัวได้อย่างไร?
สมมติว่าฉันมีอนาคตหลายอย่างและต้องรอจนกว่าสิ่งใดสิ่งหนึ่งจะล้มเหลวหรือประสบความสำเร็จทั้งหมด ตัวอย่างเช่น: Let มี 3 f1ฟิวเจอร์ส: f2, f3, หากf1ประสบความสำเร็จและf2ล้มเหลวฉันไม่รอf3(และส่งคืนความล้มเหลวให้กับลูกค้า) หากf2ล้มเหลวขณะที่f1และf3ยังคงทำงานผมไม่รอให้พวกเขา (และผลตอบแทนจากความล้มเหลว ) หากf1ประสบความสำเร็จแล้วf2ฉันก็รอต่อf3ไป คุณจะใช้มันอย่างไร?

12
Scala เป็นวิธีที่ใช้สำนวนในการ "ลบ" องค์ประกอบหนึ่งออกจากรายการที่ไม่เปลี่ยนรูปได้อย่างไร
ฉันมีรายการซึ่งอาจมีองค์ประกอบที่จะเปรียบเทียบว่าเท่ากัน ฉันต้องการรายการที่คล้ายกัน แต่มีการลบองค์ประกอบหนึ่งรายการ ดังนั้นจาก (A, B, C, B, D) ฉันต้องการจะสามารถ "ลบ" B เพียงตัวเดียวเพื่อให้ได้เช่น (A, C, B, D) ลำดับขององค์ประกอบในผลลัพธ์ไม่สำคัญ ฉันมีรหัสการทำงานที่เขียนด้วยวิธีที่ได้รับแรงบันดาลใจจาก Lisp ใน Scala มีวิธีสำนวนมากกว่านี้ไหม? บริบทคือเกมไพ่ที่มีการเล่นไพ่มาตรฐานสองสำรับดังนั้นอาจมีไพ่ที่ซ้ำกัน แต่ยังคงเล่นทีละใบ def removeOne(c: Card, left: List[Card], right: List[Card]): List[Card] = { if (Nil == right) { return left } if (c == right.head) { return left …
86 list  scala 

7
เมื่อใดควรใช้เครื่องหมายเท่ากับในการประกาศเมธอด Scala
ด้วยเครื่องหมายเท่ากับ: object HelloWorld { def main(args: Array[String]) = { println("Hello!") } } ไม่มีเครื่องหมายเท่ากับ: object HelloWorld { def main(args: Array[String]) { println("Hello!") } } ทั้งสองโปรแกรมข้างต้นดำเนินการในลักษณะเดียวกัน ในบล็อกโพสต์สิ่งที่ฉันไม่ชอบใน Scalaฉันอ่านว่าเมื่อเครื่องหมายเท่ากับหายไปเมธอดจะส่งคืนUnit(เหมือนกับของ Java void) ดังนั้นวิธีการที่ส่งคืนค่าจะต้องใช้เครื่องหมายเท่ากับ แต่วิธีการที่ไม่ส่งคืนค่าสามารถเขียนได้ด้วยวิธีใดวิธีหนึ่ง แนวทางปฏิบัติที่ดีที่สุดในการใช้เครื่องหมายเท่ากับในเมธอด Scala ที่ไม่คืนค่าคืออะไร
85 scala 

7
ความต่อเนื่องของ Scala คืออะไรและเหตุใดจึงต้องใช้
ฉันเพิ่งเสร็จสิ้นการเขียนโปรแกรมใน Scalaและฉันได้ตรวจสอบการเปลี่ยนแปลงระหว่าง Scala 2.7 และ 2.8 สิ่งที่น่าจะสำคัญที่สุดคือปลั๊กอินความต่อเนื่อง แต่ฉันไม่เข้าใจว่ามันมีประโยชน์อะไรหรือทำงานอย่างไร ฉันเห็นว่ามันดีสำหรับ I / O แบบอะซิงโครนัส แต่ฉันไม่สามารถหาสาเหตุได้ แหล่งข้อมูลยอดนิยมบางส่วนในหัวข้อนี้ ได้แก่ : ความต่อเนื่องที่คั่นและ Scala ไปที่ Scala รสชาติของ 2.8: ความต่อเนื่อง อธิบายความต่อเนื่องแบบคั่น (ใน Scala) และคำถามนี้ใน Stack Overflow: อะไรคือความแตกต่างที่ใหญ่ที่สุดระหว่าง Scala 2.8 และ Scala 2.7? น่าเสียดายที่ไม่มีการอ้างอิงใด ๆ เหล่านี้ที่พยายามกำหนดว่าความต่อเนื่องมีไว้เพื่ออะไรหรือฟังก์ชัน shift / reset ควรทำอย่างไรและฉันไม่พบการอ้างอิงใด ๆ ที่ทำ ฉันไม่สามารถเดาได้ว่าตัวอย่างใดในบทความที่เชื่อมโยงนั้นทำงานอย่างไร (หรือสิ่งที่พวกเขาทำ) ดังนั้นวิธีหนึ่งที่จะช่วยฉันได้คือการไปทีละบรรทัดผ่านหนึ่งในตัวอย่างเหล่านั้น แม้แต่เรื่องง่ายๆจากบทความที่สาม: reset …

1
วิธีการจับคู่ค่าหลายค่าใน Scala
สมมติว่าฉันต้องการจัดการค่าที่ส่งคืนหลายค่าจากบริการระยะไกลโดยใช้รหัสเดียวกัน ฉันไม่รู้ว่าจะแสดงออกอย่างไรใน Scala: code match { case "1" => // Whatever case "2" => // Same whatever case "3" => // Ah, something different } ฉันรู้ว่าฉันสามารถใช้ Extract Method และเรียกสิ่งนั้นได้ แต่ยังคงมีการเรียกซ้ำอยู่ ถ้าฉันใช้ Ruby ฉันจะเขียนแบบนี้: case code when "1", "2" # Whatever when "3" # Ah, something different end โปรดทราบว่าฉันทำให้ตัวอย่างง่ายขึ้นดังนั้นฉันจึงไม่ต้องการให้รูปแบบตรงกับนิพจน์ทั่วไปหรือบางอย่าง ค่าการจับคู่เป็นค่าที่ซับซ้อน

11
จะบันทึก DataFrame ลงใน Hive ได้อย่างไร?
เป็นไปได้ไหมที่จะบันทึกเป็นDataFrameประกายโดยตรงไปยัง Hive? ฉันได้ลองแปลงDataFrameเป็นRddแล้วบันทึกเป็นไฟล์ข้อความจากนั้นโหลดในกลุ่ม แต่ฉันสงสัยว่าฉันสามารถบันทึกdataframeลงในรังได้โดยตรงหรือไม่

3
ส่งล่ามระหว่างตำแหน่งรหัสสกาล่าโดยพลการ
ฉันมาจากพื้นหลัง Python ซึ่งเมื่อใดก็ได้ในโค้ดของฉันฉันสามารถเพิ่มได้ import pdb; pdb.set_trace() และเมื่อรันไทม์ฉันจะถูกส่งไปเป็นล่ามแบบโต้ตอบที่จุดนั้น มีสกาลาเทียบเท่าหรือไม่ในรันไทม์?


8
อะไรคือแรงจูงใจสำหรับการมอบหมายงาน Scala ที่ประเมินเป็นหน่วยแทนที่จะเป็นค่าที่กำหนด
อะไรคือแรงจูงใจสำหรับการมอบหมายงาน Scala ที่ประเมินเป็นหน่วยแทนที่จะเป็นค่าที่กำหนด รูปแบบทั่วไปในการเขียนโปรแกรม I / O คือการทำสิ่งนี้: while ((bytesRead = in.read(buffer)) != -1) { ... แต่สิ่งนี้ทำไม่ได้ในสกาล่าเพราะ ... bytesRead = in.read(buffer) .. ส่งคืนหน่วยไม่ใช่ค่าใหม่ของ bytesRead ดูเหมือนเป็นสิ่งที่น่าสนใจที่จะละเว้นจากภาษาที่ใช้งานได้ ฉันสงสัยว่าทำไมถึงทำเช่นนั้น?

4
ทำไมซิปเร็วกว่า zip ใน Scala
ฉันได้เขียนโค้ดสกาล่าเพื่อดำเนินการองค์ประกอบที่ชาญฉลาดในคอลเลกชัน ที่นี่ฉันกำหนดสองวิธีที่ทำงานเดียวกัน วิธีการหนึ่งการใช้งานและการใช้งานอื่นzip ๆzipped def ES (arr :Array[Double], arr1 :Array[Double]) :Array[Double] = arr.zip(arr1).map(x => x._1 + x._2) def ES1(arr :Array[Double], arr1 :Array[Double]) :Array[Double] = (arr,arr1).zipped.map((x,y) => x + y) เพื่อเปรียบเทียบสองวิธีนี้ในแง่ของความเร็วฉันเขียนโค้ดต่อไปนี้: def fun (arr : Array[Double] , arr1 : Array[Double] , f :(Array[Double],Array[Double]) => Array[Double] , itr : Int) ={ val …

2
Spark: ทำไมงูใหญ่ถึงมีประสิทธิภาพเหนือกว่า Scala ในกรณีที่ใช้งานของฉัน?
เพื่อเปรียบเทียบประสิทธิภาพของ Spark เมื่อใช้ Python และ Scala ฉันสร้างงานเดียวกันทั้งสองภาษาและเปรียบเทียบรันไทม์ ฉันคาดว่างานทั้งสองจะใช้เวลาเท่ากัน แต่งาน Python ใช้เวลาเท่านั้น27minในขณะที่งาน Scala ใช้เวลา37min(เกือบ 40% อีกต่อไป!) ฉันใช้งานเดียวกันใน Java เช่นกันและก็ใช้37minutesด้วย วิธีนี้เป็นไปได้อย่างไรที่ Python เร็วขึ้นมาก? ตัวอย่างที่ตรวจสอบได้น้อยที่สุด: งาน Python: # Configuration conf = pyspark.SparkConf() conf.set("spark.hadoop.fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider") conf.set("spark.executor.instances", "4") conf.set("spark.executor.cores", "8") sc = pyspark.SparkContext(conf=conf) # 960 Files from a public dataset in 2 batches input_files = …

1
มีตัวแทนของ Van Laarhoven ของ `ตัวเลือก '
เลนส์หลายประเภทมีการแสดงของ van Laarhoven ตัวอย่างเช่นLensประเภทLens s t a b สามารถแสดงเป็น: Functor f => (a -> f b) -> s -> f t ในทำนองเดียวกันTraversalสามารถแสดงในลักษณะที่คล้ายกันสลับFunctorข้อ จำกัด สำหรับApplicative: Applicative f => (a -> f b) -> s -> f t กรอบเลนส์หลายประการเช่นMonocleและลูกศรOptionalกำหนดประเภทที่เรียกว่า ในการสืบทอดของ Monocle Optics นั้น Optionalเหมาะสมระหว่างLensและTraversal ตามที่ฉันเข้าใจแล้ว: หาก a Traversalเป็นเช่นLensนั้นอาจมีเป้าหมายเป็นศูนย์ถึงหลายเป้าหมายดังนั้นสิ่งนั้นOptionalก็เหมือนเช่นLensนั้นที่มีเป้าหมายเป็นศูนย์ถึงหนึ่งเป้าหมาย ใน Monocle Optionalหมายถึงคู่ของฟังก์ชั่น: getOrModify …

1
จะให้เหตุผลเกี่ยวกับความปลอดภัยของกองซ้อนใน Scala Cats / fs2 ได้อย่างไร
นี่คือชิ้นส่วนของรหัสจากเอกสารสำหรับFS2 ฟังก์ชั่นgoซ้ำ คำถามคือเราจะรู้ได้อย่างไรว่าปลอดภัยสำหรับสแต็กและวิธีการใช้ฟังก์ชันใดที่ปลอดภัยสแต็ก import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = { def go(s: Stream[F,O], n: Long): Pull[F,O,Unit] = { s.pull.uncons.flatMap { case Some((hd,tl)) => hd.size match { case m if m <= n => Pull.output(hd) >> go(tl, n - m) case m => Pull.output(hd.take(n.toInt)) >> Pull.done } …

2
ทำไมเมธอดที่ส่งคืนยูนิตสามารถถูกแทนที่ด้วยเมธอดที่ส่งคืนสตริงเมื่อชนิดการส่งคืนไม่ได้รับอย่างชัดเจน?
ฉันกำลังทำงานผ่านตัวอย่างโค้ดจากบทเกี่ยวกับลักษณะในการเขียนโปรแกรมใน Scala Edition1 https://www.artima.com/pins1ed/traits.html และเจอพฤติกรรมแปลก ๆ เพราะพิมพ์ผิดของฉัน ในขณะที่วิธีการลักษณะดังต่อไปนี้รหัสข้อมูลเท่านั้นเอาชนะไม่ได้ให้รวบรวมข้อผิดพลาดใด ๆ แม้ว่าประเภทการกลับมาของวิธีการที่แตกต่างกันแทนที่เป็นVSUnit Stringแต่เมื่อเรียกวิธีการบนวัตถุมันจะส่งคืนหน่วย แต่ไม่ได้พิมพ์อะไร trait Philosophical { def philosophize = println("I consume memory, therefore I am!") } class Frog extends Philosophical { override def toString = "green" override def philosophize = "It aint easy to be " + toString + "!" } …

5
เหตุใด println จึงถือว่าเป็นฟังก์ชันที่ไม่บริสุทธิ์
ฉันกำลังอ่านการเขียนโปรแกรมหนังสือในรูปแบบสกาล่าและได้มีการกล่าวว่า: ... ในกรณีนี้ผลข้างเคียงของมันคือการพิมพ์ไปยังสตรีมเอาต์พุตมาตรฐาน และฉันไม่เห็นว่าผลข้างเคียงอยู่ที่ใดเพราะสำหรับอินพุตเดียวกัน println จะพิมพ์เอาต์พุตเดียวกัน (ฉันคิดว่า) อัปเดต ทุกครั้งที่เราเรียกว่า: println(5) มันจะพิมพ์5ฉันไม่เห็นกรณีที่การโทรprintln(5)จะพิมพ์ค่าอื่นที่ไม่ใช่ 5 !!

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