HyqerCard Referrenceはこちらです。
ご質問やご要望があればコメントにお書き込みください。

HyqerTalkの注意事項 その2

関数定義上の制限


関数の中でrepeat文は使わないでください。

 

使えないというより正しく動作しません。かなりダメな仕様ですみません。

 


同一オブジェクト内に関数とハンドラを同じ名前で作らないでください。

on abc

    play  flute  c  d  e

end abc

 

function abc

     return  pi

end abc

 

手抜き仕様で作成したため、上記のように定義すると、先に定義したものが後で定義したものに上書きされてしまいます。

 

 

 

関数使用上の注意

 

関数の引数に関数を入れたり、()を使ったりできません。

 

HyqerTalkの致命的な設計ミスにより上記のことができません。

 

例えば、下記のような場合

put  max(  random( 10  ) ,  ( 5 + 1 ) )  into  hensu

 

以下のようにしてください。

put  random( 10 )  into  hensu1

put  (5 + 1 ) into  hensu2

put  max(  hensu1 , hensu2 )  into  hensu

 

 

関数名の後ろの括弧の前にスペースは入れないで下さい。

 

put  random   ( 10 )  into  hensu  ← 失敗します

put  random( 10 )  into  hensu   ← うまくいきます

 

仕様を勘違いしていて関数名と括弧の間にスペースを入れてはいけないと思っていました。このあたりは弄ると他に影響が出そうなので直しません。

 

 2017/6/26追記

複数引数がある場合はフィールドなどのオブジェクトを引数に指定しないでください

 

ちょっと条件が複雑ですがmaxやminなどのように引数を複数とる場合は、フィールドやボタン(殆どそういう使い方はしないと思いますが)を指定するとエラーが出ます。

 

以下のように引数が一つであれば大丈夫ですが、

put  random(  cd  fld  1 )  into  hensu

 

以下のように引数が複数ある場合はエラーが出ます。

put  max(  5  ,  cd  fld  1 )  into  hensu

 

こういう場合は以下のようにして下さい。

put  cd  fld  1  into  hensu1

put max(  5  ,  hensu1 )  into  hensu

 

条件を覚えるのは面倒ですから、関数の引数は文字列、数値、変数のいずれかと考えておくと良いかもしれません。

 

2017/6/27追記

関数内でparams、param、paramcountの関数は正しい値を返しません

以下のような関数に出くわしたのですが、正しく動きませんでした。

function  funcTest  arg

   put  paramcount()  into  hensu

   put  random( heusu )  into  hensu2

   put  param(  hensu2  )  into  hensu3

   return  hensu 

end funcTest

上位ハンドラでの値を返してしまします。