ในขณะที่คำตอบทั้งหมดข้างต้นและคำตอบการร้องอย่างสมบูรณ์ตอบคำถามเดิมอย่างสมบูรณ์ข้อมูลเพิ่มเติมบางอย่างสามารถพบได้ในเอกสารhttps://docs.scala-lang.org/tour/pattern-matching.htmlพวกเขาไม่พอดีในกรณีของฉัน แต่เนื่องจากคำตอบ stackoverflow นี้เป็นคำแนะนำแรกใน Google ฉันต้องการโพสต์คำตอบของฉันซึ่งเป็นกรณีมุมของคำถามข้างต้น
คำถามของฉันคือ:
- วิธีการใช้ยามในการแสดงออกการแข่งขันกับการโต้แย้งของฟังก์ชั่นหรือไม่?
ซึ่งสามารถถอดความ:
- วิธีการใช้คำสั่ง if ในนิพจน์จับคู่กับอาร์กิวเมนต์ของฟังก์ชัน?
คำตอบคือตัวอย่างรหัสด้านล่าง:
def drop[A](l: List[A], n: Int): List[A] = l match {
case Nil => sys.error("drop on empty list")
case xs if n <= 0 => xs
case _ :: xs => drop(xs, n-1)
}
ลิงก์ไปยังซอสกาล่า: https://scalafiddle.io/sf/G37THif/2
ตามที่คุณเห็นcase xs if n <= 0 => xs
คำสั่งนี้สามารถใช้ n (อาร์กิวเมนต์ของฟังก์ชัน) กับคำสั่ง Guard (ถ้า)
ฉันหวังว่านี่จะช่วยคนอย่างฉัน
case x if x.size > 2 => ...