2011-07-18 16 views
2

は、C++コードの断片である:Scalaはこれらためスカラとは何ですか?getline()、std :: cin.eof()、std :: cin.bad()?ここ

int AskBase::ask_user(){ 
    for (int tries_left = MAX_TRIES; tries_left;){ 
     std::cout << prompt.c_str(); 
     std::string response; 
     getline(std::cin, response); 
     if ("^Z" == response || std::cin.eof() || std::cin.bad()) 
      return -9; 
     else if ("?V" == response) 
      std::cout << SSVID_ICON << SSVID << std::endl; 
     else if ("?" == response) 
      std::cout << "Enter ? for help, ?V for version, ^Z for exit.\n" 
     else if (validate(response)){ 
      answer_string = response; 
      return 1; 
     else 
      --tries_left; 
     } 
    return -9; 
    } 

どうであろう:Scalaで

  • getline()
  • std::cin.eof()
  • std::cin.bad()
+3

(http://stackoverflow.com/questions/4585655/scala-read-from-standard-input-line-by-line [Scalaは標準入力を読みます] )カムはこの1つと多くの他のものと一緒になります... –

+1

@Ed S.それは欠けています: 'std :: cin.bad()'。 –

答えて

4

(及びJava)、に達するは、読むときにnullとなることを意味します。私はどのようにcin.badが翻訳されるのかわかりませんが、例外である可能性があります。

あなたの例では、と等価である:

def askUser(tries_left: Int = MAX_TRIES):Int = 
    Console.readLine match { 
    case "^Z" | null => -9 
    case "?V" => { 
     println(SSVID_ICON + SSVID) 
     askUser(tries_left) 
    } 
    case "?" => { 
     println("Enter ? for help, ?V for version, ^Z for exit.") 
     askUser(tries_left) 
    } 
    case response if validate(response) => { 
     answer_string = response 
     1 
    } 
    case _ => if(tries_left == 0) -9 else askUser(tries_left - 1) 
    } 
関連する問題