如何从 dart 中的函数返回两个值?

问题描述 投票:0回答:6

这是我的代码

import 'dart:io';
import 'dart:math';

void main() {
  bool flag = false;
  for (int i = 0; i < 100; i++) {
    gameCode();
    if (userNumber == computerNumber) {
      flag = true;
      break;
    }

  }
}

int randomNumber(number) {
  Random randNumber = Random();
  int random = randNumber.nextInt(number);
  return random;
}

gameCode() {
  int computerNumber = randomNumber(9);
  print("start guessing the number : ");
  int userNumber = int.parse(stdin.readLineSync()!);
  if (userNumber == computerNumber) {
    print("You got it");
  }
}

在此代码中您可以看到

gameCode
函数。在该函数中,我需要在主函数中使用两个值。那么我如何从该函数返回这两个关键字?

//userNumber // computerNumber

这是我想从该代码返回的变量

function dart methods return dart3
6个回答
3
投票

Dart 不支持在函数中返回多个值,您可以使用数组、映射返回它,也可以使用第三个库tuple


2
投票

Dart 在当前最新版本中不支持返回多个值。对于您的情况,我建议创建一个类,用于定义

gameCode()
的结果。所以像这样:

class GameCodeResult {
  int userNumber;
  int computerNumber;

  GameCodeResult({
    required this.userNumber,
    required this.computerNumber,
  });
}

我们可以在您的程序中像这样使用它:

import 'dart:io';
import 'dart:math';

void main() {
  bool flag = false;
  for (int i = 0; i < 100; i++) {
    GameCodeResult result = gameCode();
    if (result.userNumber == result.computerNumber) {
      flag = true;
      break;
    }
  }
}

final _random = Random();
int randomNumber(int maxNumber) => _random.nextInt(maxNumber);

GameCodeResult gameCode() {
  int computerNumber = randomNumber(9);
  print("start guessing the number : ");
  int userNumber = int.parse(stdin.readLineSync()!);

  if (userNumber == computerNumber) {
    print("You got it");
  }

  return GameCodeResult(userNumber: userNumber, computerNumber: computerNumber);
}

注意,我还修复了您的

randomNumber()
方法,因为不建议为您想要的每个新随机数生成新的
Random()
对象。相反,我们应该在程序中重用
Random
的实例。


1
投票

请参考以下代码

import 'dart:io';
import 'dart:math';

void main() {
  bool flag = false;
  for (int i = 0; i < 100; i++) {
   Map<String, dynamic> res = gameCode();
    print(res);
    if (res['user_number'] == res['computer_number']) {
      flag = true;
      break;
    }

  }
}

int randomNumber(number) {
  Random randNumber = Random();
  int random = randNumber.nextInt(number);
  return random;
}

Map<String, dynamic> gameCode() {
  int computerNumber = randomNumber(9);
  print("start guessing the number : ");
  int userNumber = 
    int.parse(stdin.readLineSync()!);
  if (userNumber == computerNumber) {
    print("You got it");
  }
  return {
    "computer_number": computerNumber,
    "user_number": userNumber,
  };
}



1
投票

使用最新的

Dart: 3.0.0
版本,您可以使用 Records

从函数传递多个值
(int, int) gameCode() {
  int computerNumber = randomNumber(9);
  int userNumber = int.parse(stdin.readLineSync()!);
  return (computerNumber,userNumber);
}


var result=gameCode();
print(result.$1);
print(result.$2);

1
投票

使用最新的 Dart:3.0.0 版本,您可以使用 Records

从函数传递多个值
import 'dart:io';
import 'dart:math';
    
import 'dart:math';

void main() {
  bool flag = false;
  for (int i = 0; i < 100; i++) {
    var value = gameCode();
    if (value.$1 == value.$2) {
      flag = true;
      break;
    }
  }
  print("The flag is : $flag");
}

int randomNumber(number) {
  Random randNumber = Random();
  int random = randNumber.nextInt(number);
  return random;
}

(int, int) gameCode() {
  int computerNumber = randomNumber(9);
  print("start guessing the computer number : $computerNumber");
  int userNumber = int.parse(stdin.readLineSync()!);
  print("start guessing the user number : $userNumber");
  if (userNumber == computerNumber) {
    print("You got it");
  }
  
  return (computerNumber, userNumber);
}

0
投票

您现在可以使用记录来完成此操作,它应该允许您发送类型化属性。此示例将返回带有命名字段的记录。

({int computerNumber, int userNumber}) gameCode() {
  ...
  return (computerNumber: computerNumber, userNumber: userNumber);
}

要解构命名字段,您可以使用冒号变量

main() {
  final (:computerNumber, :userNumber) = gameCode();
}
   
© www.soinside.com 2019 - 2024. All rights reserved.