Functions Paramaters——Dart

Functions Paramaters——Dart

Dart是一个完全面向对象的语言,它的方法也是对象,对应的类型为Function

这意味着方法也能被赋值给变量,或者当做参数传递给其他方法。

你也可以像操作方法那样操作Dart的类的实例,具体请参照Callable classes

下面是一个方法的的示例:

bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}
省略参数类型

你可以省略参数类型,

isNoble(atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}
只有一行表达式时可以使用简写语法

如果方法只有一行表达式,你可以使用简写语法:

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

=> expr语法是{ return expr; }的简写形式.=>符号可以参考箭头表达式。

注意:只有表达式——不是一个声明——可以出现在=>;之间。例如,你不能放入if语句,但是你可以使用一个条件表达式。

方法的参数类型有两种,requiredoptional

required参数会优先展示,后面跟着可选参数。

可选参数

可选参数也可以添加命名或者位置参数,但不能同时添加。

可选命名参数—— {}

定义方法时,通过{param1, param2, …}的形式来指定命名参数,如下所示:

/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold, bool hidden}) {

}

调用该方法时,通过paramName: value的形式来指定命名参数。如下所示:

// 正常调用
enableFlags(bold: false, hidden: false);
// 参数调换顺序
enableFlags(hidden: false, bold: false);
// 只传入第一个
enableFlags(bold: false);
// 只传入第二个参数
enableFlags(hidden: false);

Flutter中的widget构造器只能采用命名参数的形式来定义。

在Dart代码中, 你可以给任意的命名参数添加@required参数,表示这个命名参数是必不可少的。代码如下:

const Scrollbar({Key key, @required Widget child})

Required定义在meta包下。
直接通过import package:meta/meta.dart导入包,或者导入其他包含meta的包,比如Flutter的package:flutter/material.dart

可选位置参数—— []

使用[]将参数(一个或多个)包裹起来,即可将它们标记为可选参数。
另外,可选位置参数需要放在参数列表的末尾。

// 可选位置参数
String say(String from, String msg, [String device, String name]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}
// 不调用可选参数
print('${say("China", "Beijing")}');
// 调用第一个可选参数
print('${say("China", "Beijing", "mate 10 pro")}');
// 调用两个可选参数
print('${say("China", "Beijing", "mate 20 X", "wangcai")}');

输出结果:

China says Beijing
China says Beijing with a mate 10 pro ,
China says Beijing with a mate 20 X , name: wangcai
参数默认值—— =

可以使用=给参数设置默认值,命名参数和可选参数均可。默认值必须是编译器常量。如果没有提供默认值,则默认值就是null。

给命名参数设置默认值

代码如下:

void setDefaultValues(
    {bool value1 = true,
    String value2 = "value2",
    int value3 = 10,
    double value4}) {
  print('value1: $value1, value2: $value2, value3: $value3, value4: $value4');
}
// 参数默认值
setDefaultValues();
setDefaultValues(value1: false, value2: "abc", value3: 100, value4: 1000.11);
setDefaultValues(value1: true);
setDefaultValues(value2: "tiny");
setDefaultValues(value3: 1000);
setDefaultValues(value4: 100.0);

输出结果:

value1: true, value2: value2, value3: 10, value4: null
value1: false, value2: abc, value3: 100, value4: 1000.11
value1: true, value2: value2, value3: 10, value4: null
value1: true, value2: tiny, value3: 10, value4: null
value1: true, value2: value2, value3: 1000, value4: null
value1: true, value2: value2, value3: 10, value4: 100.0

需要注意的是,老版本代码可能使用:来设置参数默认值,这个已经被废弃了,现在推荐使用=来指定参数默认值。

给可选参数设置默认值
// 可选参数设置默认值
void setDefaultValuesToOptional(bool value1, String value2,
    [int value3 = 10, double value4]) {
  print('value1: $value1, value2: $value2, value3: $value3, value4: $value4');
}
// 参数默认值——可选参数
setDefaultValuesToOptional(true,"11111");
setDefaultValuesToOptional(true,"11111",100);
setDefaultValuesToOptional(true,"11111",100,1000.0);

输出结果:

value1: true, value2: 11111, value3: 10, value4: null
value1: true, value2: 11111, value3: 100, value4: null
value1: true, value2: 11111, value3: 100, value4: 1000.0
默认参数也可以设置list和map
void doStuff(
    {List<int> list = const [1, 2, 3],
    Map<String, String> gifts = const {
      'first': 'paper',
      'second': 'cotton',
      'third': 'leather'
    }}) {
  print('list:  $list');
  print('gifts: $gifts');
}
doStuff();
doStuff(list: [4,5,6],gifts: {"11":"11","22":"22"});
doStuff(list: [1]);
doStuff(gifts: {"33":"33"});

输出结果:

list:  [1, 2, 3]
gifts: {first: paper, second: cotton, third: leather}
list:  [4, 5, 6]
gifts: {11: 11, 22: 22}
list:  [1]
gifts: {first: paper, second: cotton, third: leather}
list:  [1, 2, 3]
gifts: {33: 33}
这段代码主要是用于处理图像分类数据,并使用图最小最大化算法进行图像分类。下面是对代码的解释: 1. `clear clc warning off;`: 清空命令行窗口并关闭警告信息; 2. `path = pwd; addpath(genpath(path));`: 将当前路径及其子文件夹添加到MATLAB搜索路径中; 3. `dataName{1} = 'flower17';`: 设置图像数据集的名称,此处为flower17; 4. `for name = 1`: 循环遍历数据集中的每个图像; 5. `load(['./',dataName{name},'_Kmatrix']);`: 加载预处理后的图像数据,其中_Kmatrix是图像的相似性矩阵,保存在.mat文件中; 6. `Y(Y==-1)=2;`: 将标签中的-1替换为2,以便后续处理; 7. `numclass = length(unique(Y));`: 计算图像数据集中的类别数; 8. `numker = size(KH,3); num = size(KH,1);`: 计算图像相似性矩阵的大小,其中numker为矩阵的张数,num为矩阵的行数; 9. `KH = remove_large(KH); KH = knorm(KH); KH = kcenter(KH); KH = divide_std(KH);`: 对图像相似性矩阵进行预处理,包括去除异常值、归一化、中心化、标准化等; 10. `options.seuildiffsigma=1e-4;`: 设置图最小最大化算法的参数,即权重变化的停止条件; 11. `options.goldensearch_deltmax=1e-1; options.numericalprecision=1e-16;`: 设置算法的一些数值参数,包括黄金分割法的初始精度和权重的数值精度; 12. `options.firstbasevariable='first'; options.nbitermax=500; options.seuil=0; options.seuilitermax=10; options.miniter=0;`: 设置算法的一些参数,包括选择基础变量的方法、最大迭代次数、权重阈值、迭代次数阈值等; 13. `options.threshold = 1e-4;`: 设置算法的收敛阈值; 14. `qnorm = 2;`: 计算范数,一般默认为2; 15. `[S,Sigma,obj] = graph_minmax(KH, options);`: 使用图最小最大化算法对图像相似性矩阵进行聚类,并返回聚类结果; 16. `S1 = (S + S') / 2; D = diag(1 ./ sqrt(sum(S1))); L = D * S1 * D;`: 将聚类结果转化为拉普拉斯矩阵,其中D为度矩阵,S1为对称邻接矩阵; 17. `[H,~] = eigs(L, numclass, 'LA');`: 对拉普拉斯矩阵进行特征值分解,获取特征向量; 18. `res= myNMIACC(H,Y,numclass);`: 计算分类精度; 19. `disp(res);`: 显示分类精度结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tinyvampirepudge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值