所以,我正在收集輸入并使用帶有條件的while回圈(如果用戶省略輸入說......)我在同一代碼中將這個while回圈用于多個輸入集合,所以我決定為它撰寫一個函式幾個引數,但是在用戶跳過輸入然后輸入它之后,它不會注冊,輸出應該列印"how are you $input"但是它只是列印"how are you"并將輸入留空
main() {
// First name
print('First name:');
var name1 = stdin.readLineSync();
void conds(name, shitbe) {
while (name.isEmpty) {
print('Field cannot be empty');
print(shitbe);
name = stdin.readLineSync();
}
}
conds(name1, 'First name:');
print('How are you $name1');
輸出應該像
PS C:\tools\Projects> dart playground.dart
First name:
Field cannot be empty
First name:
John
How are you John
PS C:\tools\Projects>
但這是我在第一次遺漏后得到的
PS C:\tools\Projects> dart test.dart
First name:
Field cannot be empty
First name:
John
How are you
PS C:\tools\Projects>
uj5u.com熱心網友回復:
Dart 中的所有變數都是對物件的參考。當您將變數作為方法的引數提供時,該變數被復制,因此我們得到了該參考的副本。
在方法內部,您可以使用此參考做任何您想做的事情,但是如果您更改參考/變數指向的物件,呼叫您的方法的代碼將不會看到此更改。
所以在你里面conds()你正在改變name,這是一個引數,指向String你從用戶那里得到的一個新物件。但是呼叫者conds()不會看到name1變數的變化,因為參考被復制到方法中。
我會親自將代碼重寫為這樣的代碼,其中該方法處理與用戶的所有互動并String隨后回傳。
import 'dart:io';
void main() {
// First name
final name = getInput('First name:');
print('How are you $name');
}
String getInput(String message) {
print(message);
var input = stdin.readLineSync();
while (input == null || input.isEmpty) {
print('Field cannot be empty');
print(message);
input = stdin.readLineSync();
}
return input;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/418848.html
標籤:
下一篇:跨多個子組撰寫函式
