MAS コミュニティ
artisoc質問用掲示板

質問 (解決済み)

[artisocモデル] agtsetをfunctionの戻り値にできるか
質問者: massupportさん , 質問日時: 2017/05/23 06:46
agtsetをユーザー定義関数(function)の戻り値にするとエラーが出ます。
この場合、どのようにすればよろしいでしょうか。
以下のようなコードです。

//A. ユーザ定義関数を呼び出して、agtsetを戻り値でうけとる
oneset = makeagtset_function()
println("onesetの要素数="& countagtset(oneset))
println("oneset2の要素数="& countagtset(oneset2))

//B. サブルーチンを呼び出して、agtsetの中にagtを入れる
makeagtset_sub(oneset2)

// ユーザー定義関数の戻り値を参照するとエラーがでる
println("onesetの要素数="& countagtset(oneset))
//--->ここでエラー発生「3. 無効なagtset IDです」

println("oneset2の要素数="& countagtset(oneset2))

//サブルーチン
sub makeagtset_sub(oneset_sub as agtset) {
makeagtset(oneset_sub, universe.map.hito)
}

//ユーザ定義関数1
function makeagtset_function() as agtset {
dim oneset_function as agtset
makeagtset(oneset_function, universe.map.hito)
return(oneset_function)



▼解決した回答


artisocでは引数のオブジェクトを編集することができません。
引数のエージェント集合型に値を入れていることで、内部での
オブジェクトの扱いがおかしくなっているように見えます。

下記のようにすると正しく動作します。

1) 引数のエージェント集合型をローカル変数に複製
2) 関数のローカル変数にエージェントを入れる。
3) ローカル変数を返す

----------------
oneset2 = makeagtset_sub(oneset2)

----------------
function makeagtset_sub(oneset_sub as agtset) as agtset{
dim temp as agtset
DuplicateAgtSet(temp, oneset_sub)
makeagtset(temp, universe.map.hito)
return temp
}

回答者: massupport さん , 回答日時: 2017/05/23 06:47

▼ 全ての回答


artisocでは引数のオブジェクトを編集することができません。
引数のエージェント集合型に値を入れていることで、内部での
オブジェクトの扱いがおかしくなっているように見えます。

下記のようにすると正しく動作します。

1) 引数のエージェント集合型をローカル変数に複製
2) 関数のローカル変数にエージェントを入れる。
3) ローカル変数を返す

----------------
oneset2 = makeagtset_sub(oneset2)

----------------
function makeagtset_sub(oneset_sub as agtset) as agtset{
dim temp as agtset
DuplicateAgtSet(temp, oneset_sub)
makeagtset(temp, universe.map.hito)
return temp
}

回答者: massupport さん , 回答日時: 2017/05/23 06:47
その他として、以下の方法があります。
・その1.FunctionではなくSubとして、戻り値のAgtSetについては、エージェント変数などのグローバル変数のAgtsetに格納する。
・その2.AgtSetの中身をIDの文字列にして、これを戻り値としてしまう。

回答者: massupport さん , 回答日時: 2017/05/23 08:50

MASコミュニティ
掲示板TOP







Copyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.
( 会社情報 情報セキュリティ・個人情報について )