いいね!数

0

閲覧数
66

こんにちは。

初めてLotusScriptでユーザー定義型を使おうと思ってるのですが、関数の戻り値にユーザー定義型を指定するにはどうするのでしょうか?

Type MyItem
	Name As String
	num As Currency
	value As Currency
	sum As Currency
	taxrate As Currency
End Type

Function getAt(index As Integer) As MyItem
	Dim obj As MyItem
End Function

このようなコードをスクリプトライブラリに書くと、Function getAt()の行で「Functionの戻り値の型が不正です」と表示されてしまいます。

StringやIntegerなど標準の型なら指定してもエラーにならないので、Functionの記述方法に基本的なまちがいはないと思ってます。

もしかして、Functionの戻り値には自分で定義した型は指定できないとか?

/Yac

サーバー情報:9.0.1 | クライアント情報:9.0.1 | 
カテゴリ:アプリ開発 - Notes アプリ | タグ:
  | 質問日時:Mar 7, 2020, 2:32:41 PM

回答・コメント

いいね!数

0

自分も試してみたら同様のエラーになりました。

エラーメッセージで検索したら、このページが引っかかりました。

https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_STR_ILLFUNCRET.html

IBMのサイトなのでなくなっちゃうかもしれないので、スクリーンショットも貼り付けておきます。

 

どうやら、ユーザー定義型はダメのようですね。

 

ちなみに、釈迦に説法かもしれませんが、自分なら、クラスを作成して代用するかなー?と思います。

回答日時:Mar 7, 2020, 11:25:13 PM

いいね!数

1

うお、やっぱり。

回答ありがとうございます。

なんでエラーになるんだー、と2時間くらい無駄にしてしまった。

となると引数で受け渡すのが正解なんですかね。うーん、ダサ。

Sub getAt(index As Integer, item as MyItem)
  ' listはグローバルな配列と思って
  item = list(index)
End Sub

初めてのクラス定義を試してて、この問題が起きてしまい、先に進めなくなってしまったところだったのです。

しかし、NotesDocumentなどのクラスライブラリがNotesItemなどのオブジェクトを返せるのだから、できて当然だと思ってたんですけどね。

もしかして、Typeで宣言したユーザー定義の型はダメだけど、classで定義したユーザー定義クラスのオブジェクトは大丈夫ということですか?

試してみよう。

/Yac

回答日時:Mar 8, 2020, 1:22:23 AM

いいね!数

2

やはり、関数の戻り値はTypeで宣言したユーザー定義の型データはダメだけど、classで定義したユーザー定義クラスのオブジェクトは大丈夫ということかぁ。

およよさんの書かれてた「自分なら、クラスを作成して代用するかなー?」というのはそういう意味でしたか!

Class MyItem
  Public name As String
  Public num As Currency
  Public value As Currency
  Public sum As Currency
  
  Public taxrate As Currency	
End Class

Function getAt(index As Integer) As MyItem
  Set getAt = itemlist(index)
End Function
 
 

単に値を保持する構造体みたいなデータ構造だからTypeでよかろうと思ったのですが、へんな制限があるわけですね。

/Yac

回答日時:Mar 8, 2020, 1:58:39 AM