dart で可変長引数を実現するためのパッケージ(dynamic_function)を作成しました。
とりあえず、デモ用のソースを提示しておきます(dart-sdk-3.7.2 と dart-sdk-3.9.0-14.0.dev で動作を確認しました。また flutter web, flutter windows desktop でも動作しました(flutter-sdk-3.29.3))。
pubspec..yaml
name: qiita
description: A sample command-line application
version: 0.0.1
publish_to: none
environment:
sdk: ^3.7.2
dependencies:
dynamic_function: ^1.0.4
dev_dependencies:
func_demo.dart
import 'package:dynamic_function/dynamic_function.dart';
final dynamic sum = DynamicFunction((
List<dynamic> positional,
Map<Symbol, dynamic> named
) {
print('positional.length=${positional.length}');
int result = 0;
for (int i = 0; i < positional.length; i++) {
result += positional[i] as int;
}
return result;
});
void main() {
int answer = sum(11, 22, 33);
print('answer=$answer');
}
/*
【実行結果】
positional.length=3
answer=66
*/
class_demo.dart
import 'package:dynamic_function/dynamic_function.dart';
class MyNumber {
final int _num;
MyNumber(this._num);
late final dynamic addNumbers = DynamicFunction((
List<dynamic> positional,
Map<Symbol, dynamic> named
) {
print('positional.length=${positional.length}');
int result = _num;
for (int i = 0; i < positional.length; i++) {
result += positional[i] as int;
}
return result;
});
}
void main() {
final myNum = MyNumber(11);
int answer = myNum.addNumbers(22, 33);
print('answer=$answer');
}
/*
【実行結果】
positional.length=2
answer=66
*/