Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何将dart中字符串内的两个变量相乘?_String_Dart_String Interpolation - Fatal编程技术网

String 如何将dart中字符串内的两个变量相乘?

String 如何将dart中字符串内的两个变量相乘?,string,dart,string-interpolation,String,Dart,String Interpolation,“${element['price']*element['step']}c” 总是显示错误 The operator '*' isn't defined for the type 'Object'. 结果必须乘以两个变量并转换为字符串 怎么了?我找不到任何答案。按照文件说明制作 元素为 var element = { 'title': 'Apple and more more thing', 'category': 'Fruit', 'description': 'Some dat

“${element['price']*element['step']}c”

总是显示错误

The operator '*' isn't defined for the type 'Object'.
结果必须乘以两个变量并转换为字符串

怎么了?我找不到任何答案。按照文件说明制作

元素

var element = {
  'title': 'Apple and more more thing',
  'category': 'Fruit',
  'description': 'Some data to describe',
  'price': 24.67,
  'bonus': '1% bonus',
  'group': 'Picnik',
  'step': 1.0
};

您可能需要将它们强制转换为特定类型。例如,如果它们的类型为双重
double

“${(元素['price']作为双精度)*(元素['step']作为int)}c”


将对象添加到问题后编辑。将“步骤”更改为int。

您可能需要将它们转换为特定类型。例如,如果它们的类型为双重
double

“${(元素['price']作为双精度)*(元素['step']作为int)}c”


将对象添加到问题后编辑。将“step”更改为int。

Dart是一种静态类型安全语言,因此在代码运行之前,已经对代码进行了分析,以确保没有静态确定的类型问题

在您的示例中,您定义了以下变量:

var element = {
  'title': 'Apple and more more thing',
  'category': 'Fruit',
  'description': 'Some data to describe',
  'price': 24.67,
  'bonus': '1% bonus',
  'group': 'Picnik',
  'step': 1.0
};
通过使用
var
可以告诉Dart它应该自动确定类型。在这种情况下也可以这样做。Dart将看到地图中的所有键都是
String
,因此我们可以安全地假定键类型为
String

然后,它查看这些值,并试图找到一种对所有值都通用的类型。由于我们有
double
String
作为值,因此类型必须是
Object
,因为如果我们想要一个包含所有值的类型,我们不能更具体

因此,映射的类型将被确定为:
map

当您在地图上使用
[]
操作符时,它将被定义为从此地图返回
对象
,因为这是我们唯一可以确定的

但当您尝试执行以下操作时,这是一个问题:

"${element['price'] * element['step']} c"
由于我们在analyzer阶段可以看到,我们将调用
对象
上的
*
运算符,因此analyzer将停止您的程序,并出现类型错误,因为您尝试执行的操作不被视为类型安全

有多种修复方法,您也可以在其他答案中看到:

类型转换 您可以告诉Dart“嘿,我知道我在做什么”,并强制Dart使用特定类型:

"${(element['price'] as double) * (element['step'] as double)} c"
动态 您可以将地图声明为包含
dynamic
作为值:

var element = <String, dynamic>{
  'title': 'Apple and more more thing',
  'category': 'Fruit',
  'description': 'Some data to describe',
  'price': 24.67,
  'bonus': '1% bonus',
  'group': 'Picnik',
  'step': 1.0
};

通过这样做,您可以确保Dart知道每个属性的类型并获得类型安全性。

Dart是一种静态类型安全语言,因此在代码运行之前,已经对代码进行了分析,以确保没有静态确定的类型问题

在您的示例中,您定义了以下变量:

var element = {
  'title': 'Apple and more more thing',
  'category': 'Fruit',
  'description': 'Some data to describe',
  'price': 24.67,
  'bonus': '1% bonus',
  'group': 'Picnik',
  'step': 1.0
};
通过使用
var
可以告诉Dart它应该自动确定类型。在这种情况下也可以这样做。Dart将看到地图中的所有键都是
String
,因此我们可以安全地假定键类型为
String

然后,它查看这些值,并试图找到一种对所有值都通用的类型。由于我们有
double
String
作为值,因此类型必须是
Object
,因为如果我们想要一个包含所有值的类型,我们不能更具体

因此,映射的类型将被确定为:
map

当您在地图上使用
[]
操作符时,它将被定义为从此地图返回
对象
,因为这是我们唯一可以确定的

但当您尝试执行以下操作时,这是一个问题:

"${element['price'] * element['step']} c"
由于我们在analyzer阶段可以看到,我们将调用
对象
上的
*
运算符,因此analyzer将停止您的程序,并出现类型错误,因为您尝试执行的操作不被视为类型安全

有多种修复方法,您也可以在其他答案中看到:

类型转换 您可以告诉Dart“嘿,我知道我在做什么”,并强制Dart使用特定类型:

"${(element['price'] as double) * (element['step'] as double)} c"
动态 您可以将地图声明为包含
dynamic
作为值:

var element = <String, dynamic>{
  'title': 'Apple and more more thing',
  'category': 'Fruit',
  'description': 'Some data to describe',
  'price': 24.67,
  'bonus': '1% bonus',
  'group': 'Picnik',
  'step': 1.0
};

通过这样做,您可以确保Dart知道每个属性的类型并获得类型安全性。

什么类型是
元素
?您显示的代码应该可以工作,元素中的变量似乎不是Dart认为能够使用乘法运算符的类型。我建议验证这两个变量的输出。@nileshenta如果映射中的类型被视为
Object
,它将不能与
toInt()
一起工作,因为您不能在
Object
上调用
toInt()
。那么您有一个
map
包含多种类型的对象作为值吗?这就是Dart自动将地图声明为
map
的原因,这意味着您需要键入从该地图获取的投射对象。我建议用您的数据创建一个类,这样您就可以获得类型安全性。@dev aentgs在我写评论时没有提供这个示例。但是,是的,重复组在这里也是有问题的……什么类型是
元素
?您显示的代码应该可以工作,元素中的变量似乎不是Dart认为能够使用乘法运算符的类型。我建议验证这两个变量的输出。@nileshenta如果映射中的类型被视为
Object
,它将不能与
toInt()
一起工作,因为您不能在
Object
上调用
toInt()
。那么您有一个
map
包含多种类型的对象作为值吗?这就是Dart自动将地图声明为
map
的原因,这意味着您需要键入从该地图获取的投射对象。我建议用您的数据创建一个类,这样您就可以获得类型安全性。@dev aentgs在我编写时没有提供该示例