奈良阪某/YAYAで複数(連想)配列引数渡し
の編集
index.php?%E5%A5%88%E8%89%AF%E9%98%AA%E6%9F%90/YAYA%E3%81%A7%E8%A4%87%E6%95%B0%28%E9%80%A3%E6%83%B3%29%E9%85%8D%E5%88%97%E5%BC%95%E6%95%B0%E6%B8%A1%E3%81%97
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
殊海夕音/FINE/template
奈良阪某/YAYAで連想配列 につづいて、YAYAで本質的に複数の配列を関数に渡せないと聞いたので、簡単に使えるようにしてみた。 これは配列について効果を発揮するが、 奈良阪某/YAYAで連想配列 の「ハッシュ:引数渡しによる実装」は実態的に単なる配列なので、それにも使える。 というか連想配列とコレは、クラスを実装する布石ともいえる。 * 実装関数コード [#udfbce80] /* _iarray = INDIVIDUAL(_array) 配列をINDIVIDUALオブジェクトにする。 */ INDIVIDUAL{ ('__INDIVIDUAL__', _argc, _argv) } /* _array = DEINDIVIDUAL(_iarray) INDIVIDUALオブジェクトを配列にする。 */ DEINDIVIDUAL{ _argv[2, _argc - 1] } /* _array = IGET(_argv, 0) 配列からINDIVIDUALオブジェクトを区別して配列として取り出す。 */ IGET{ _target_index = _argv[_argc - 1] _index = 0 _i = 0 while _i < _argc - 1 { _value = _argv[_i] if _value == '__INDIVIDUAL__' { _indivisual_length = _argv[_i + 1] if _index == _target_index { _argv[_i + 2, _i + 1 + _indivisual_length] return } else { _i += _indivisual_length + 2 _index ++ } } else { if _index == _target_index { _argv[_i] return } else { _i ++ _index ++ } } } } /* _iarray = IDGET(_argv, 0) 配列からINDIVIDUALオブジェクトを区別してINDIVIDUALオブジェクトのまま取り出す。 */ IDGET{ _target_index = _argv[_argc - 1] _index = 0 _i = 0 while _i < _argc - 1 { _value = _argv[_i] if _value == '__INDIVIDUAL__' { _indivisual_length = _argv[_i + 1] if _index == _target_index { _argv[_i, _i + 1 + _indivisual_length] return } else { _i += _indivisual_length + 2 _index ++ } } else { if _index == _target_index { _argv[_i] return } else { _i ++ _index ++ } } } } * 使用方法 [#x68521b9] ** 複数の配列等を渡す [#p949ca8f] func{ _value1 = IGET(_argv, 0) _array1 = IGET(_argv, 1) _value2 = IGET(_argv, 2) _array2 = IGET(_argv, 3) _return_array = (_array2, _value1, _value2, _array1) _return_array } _a1 = (1,2,3,4) _a2 = (11,12,13,14,15) func(99, INDIVIDUAL(_a1), 999, INDIVIDUAL(_a2)) ** 複数の配列等を返す [#me168956] ret2array{ _ia1 = INDIVIDUAL(1,2,3) _ia2 = INDIVIDUAL(11,12,13) (_ia1, _ia2) } _ret = ret2array() _ia1 = IGET(_ret, 0) _ia2 = IGET(_ret, 1) (_ia2, _ia1) ** 複数の連想配列を渡す・返す [#tee5fb85] func{ _m = IGET(_argv, 0) _a = IGET(_argv, 1) _m2 = IGET(_argv, 2) _a2 = IGET(_argv, 3) _m = map_set(_m, 'a', _a) _m2 = map_set(_m2, 'b', _a2) (INDIVIDUAL(_m),INDIVIDUAL(_m2)) } _m = map_new() _m = map_set(_m, 'k1', 'v1') _m = map_set(_m, 'k2', 'v2') _m2 = map_new() _m2 = map_set(_m2, 'kk1', 'vk1') _m2 = map_set(_m2, 'kk2', 'vk2') _mm = func(INDIVIDUAL(_m), 2, INDIVIDUAL(_m2), 5) _rm1 = IGET(_mm, 0) _rm2 = IGET(_mm, 1) map_keys(_rm2) -- map_keys(_rm1) よろしければどうぞ
タイムスタンプを変更しない
奈良阪某/YAYAで連想配列 につづいて、YAYAで本質的に複数の配列を関数に渡せないと聞いたので、簡単に使えるようにしてみた。 これは配列について効果を発揮するが、 奈良阪某/YAYAで連想配列 の「ハッシュ:引数渡しによる実装」は実態的に単なる配列なので、それにも使える。 というか連想配列とコレは、クラスを実装する布石ともいえる。 * 実装関数コード [#udfbce80] /* _iarray = INDIVIDUAL(_array) 配列をINDIVIDUALオブジェクトにする。 */ INDIVIDUAL{ ('__INDIVIDUAL__', _argc, _argv) } /* _array = DEINDIVIDUAL(_iarray) INDIVIDUALオブジェクトを配列にする。 */ DEINDIVIDUAL{ _argv[2, _argc - 1] } /* _array = IGET(_argv, 0) 配列からINDIVIDUALオブジェクトを区別して配列として取り出す。 */ IGET{ _target_index = _argv[_argc - 1] _index = 0 _i = 0 while _i < _argc - 1 { _value = _argv[_i] if _value == '__INDIVIDUAL__' { _indivisual_length = _argv[_i + 1] if _index == _target_index { _argv[_i + 2, _i + 1 + _indivisual_length] return } else { _i += _indivisual_length + 2 _index ++ } } else { if _index == _target_index { _argv[_i] return } else { _i ++ _index ++ } } } } /* _iarray = IDGET(_argv, 0) 配列からINDIVIDUALオブジェクトを区別してINDIVIDUALオブジェクトのまま取り出す。 */ IDGET{ _target_index = _argv[_argc - 1] _index = 0 _i = 0 while _i < _argc - 1 { _value = _argv[_i] if _value == '__INDIVIDUAL__' { _indivisual_length = _argv[_i + 1] if _index == _target_index { _argv[_i, _i + 1 + _indivisual_length] return } else { _i += _indivisual_length + 2 _index ++ } } else { if _index == _target_index { _argv[_i] return } else { _i ++ _index ++ } } } } * 使用方法 [#x68521b9] ** 複数の配列等を渡す [#p949ca8f] func{ _value1 = IGET(_argv, 0) _array1 = IGET(_argv, 1) _value2 = IGET(_argv, 2) _array2 = IGET(_argv, 3) _return_array = (_array2, _value1, _value2, _array1) _return_array } _a1 = (1,2,3,4) _a2 = (11,12,13,14,15) func(99, INDIVIDUAL(_a1), 999, INDIVIDUAL(_a2)) ** 複数の配列等を返す [#me168956] ret2array{ _ia1 = INDIVIDUAL(1,2,3) _ia2 = INDIVIDUAL(11,12,13) (_ia1, _ia2) } _ret = ret2array() _ia1 = IGET(_ret, 0) _ia2 = IGET(_ret, 1) (_ia2, _ia1) ** 複数の連想配列を渡す・返す [#tee5fb85] func{ _m = IGET(_argv, 0) _a = IGET(_argv, 1) _m2 = IGET(_argv, 2) _a2 = IGET(_argv, 3) _m = map_set(_m, 'a', _a) _m2 = map_set(_m2, 'b', _a2) (INDIVIDUAL(_m),INDIVIDUAL(_m2)) } _m = map_new() _m = map_set(_m, 'k1', 'v1') _m = map_set(_m, 'k2', 'v2') _m2 = map_new() _m2 = map_set(_m2, 'kk1', 'vk1') _m2 = map_set(_m2, 'kk2', 'vk2') _mm = func(INDIVIDUAL(_m), 2, INDIVIDUAL(_m2), 5) _rm1 = IGET(_mm, 0) _rm2 = IGET(_mm, 1) map_keys(_rm2) -- map_keys(_rm1) よろしければどうぞ
テキスト整形のルールを表示する