簡體   English   中英

如何通過命令行在scala中傳遞輸入

[英]How to pass input in scala through command line

  import scala.io._    

  object Sum {    
     def main(args :Array[String]):Unit = {    

      println("Enter some numbers and press ctrl-c")

     val input = Source.fromInputStream(System.in)

     val lines = input.getLines.toList

     println("Sum "+sum(lines))

   }

   def toInt(in:String):Option[Int] =

      try{

        Some(Integer.parseInt(in.trim))

      }

      catch    {
       case e: NumberFormatException => None    
   } 

   def sum(in :Seq[String]) = {

     val ints = in.flatMap(s=>toInt(s))

      ints.foldLeft(0) ((a,b) => a +b)

     } }

我試圖在傳遞輸入后運行這個程序我按下了 ctrl + c 但是

它給出了這條消息 E:\\Scala>scala HelloWord.scala 輸入一些數字並按 ctrl-c 1 2 3 Terminate batch job (Y/N)?

額外的觀察,注意trait App使對象可執行,因此不必聲明main(...)函數,例如這樣,

object Sum extends App {
  import scala.io._
  import scala.util._

  val nums = Source.stdin.getLines.flatMap(v => Try(v.toInt).toOption)
  println(s"Sum: ${nums.sum}")
}

使用Try ,從StringInt不成功轉換將變為None並變平。

還要注意對象和類是大寫的,因此按照約定,我們寫object Sum而不是object sum

您還可以使用外部 API。 我真的很喜歡扇貝 API

試試這段代碼。 它應該按預期工作。

object Sum {
    def main(args: Array[String]) {
        val lines = io.Source.stdin.getLines
        val numbers = lines.map(_.toInt)
        println(s"Sum: ${numbers.sum}")
    }
}

另外,結束輸入流的正確快捷方式是Ctrl + D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM