トピック
受付中
ナツキ natukin1978

数値変数にも文字列変数にもなる変数って定義できないのかな?

自作関数の引数の型が数値/文字列どちらもOKって仕様で、引数の値をローカル変数に記録しておきたいって場合に便利だと思ったのですが……
4そうだね
プレイ済み
返信[1]
親投稿
ナツキ natukin1978
妄想中(動きません。ご注意下さい) VAR A?=10 VAR A?="10" ↑ どっちもOK。 最初に代入した時に型が確定する。 一度確定した型を変更する事はできない。
0そうだね
プレイ済み
返信[2]
親投稿
れい rei-nntnd
変数の型を判定する命令とともに欲しいっちゃ欲しいんだけど… 変数アクセスの遅さとか複雑さとかいろいろ考えると微妙かなぁ。 プチコンの変数の型は実質文字列型と数値型しかないので2種類、引数2個あったら組み合わせで4パターン作ればいいだけだし、文字と数字と混ぜなきゃいけないこと自体が少ない。 動的型決定いれると速度もさらに遅くなるわけで。 速度が必要ない用途なら初めから全部文字列で。 速度が必要なら文字列と数字と混ざっているのはマイナスにしかならないので構造を考え直した方がいい。 そんな感じかなぁ
1そうだね
プレイ済み
返信[3]
親投稿
say sayer.exe
basicに毒されし過ぎてる身の意見としては、使い道がわからないなぁ…
0そうだね
プレイ済み
返信[4]
親投稿
javascript感
0そうだね
プレイ済み
返信[5]
親投稿
ナツキ natukin1978
確かに、型が2種類と少ないから型が違うバージョンを作るというのは無茶な話では無いんですよね。 DEFで引数は厳密な型チェックを行っていないって説明書に書いてあったから、ちょっと惜しいな〜って思いまして。
1そうだね
プレイ済み
返信[6]
親投稿
MIKI ifconfig
けいさんが引数が文字列か数値か判定する関数公開してた。 https://miiverse.nintendo.net/replies/AYIHAAAEAAArVRTpgnu-Dg
0そうだね
プレイ済み
返信[7]
親投稿
れい rei-nntnd
say氏 VBは動的型決定だよ BASICだよ
0そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
プチコン3号の自作関数の引数に使用している変数の型は値が代入されるまでは未確定で代入されることで決定します。 詳しくはこちらに書いています。 https://miiverse.nintendo.net/posts/AYMHAAACAAADVHjYtPmLxg したがって、すでにお望みの仕様になっています。 ただし、引数に使う変数以外で数値でも文字列でも代入可能な変数を定義することはできないので条件判断を行い数値の場合と文字列の場合の2通り用意する必要がありますね。
0そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
実数型と整数型と文字列型を判別する自作のSUFFIX関数を以前作りましたが、実数型と整数型を判別する必要がないならばこれで数値か文字列かが判別可能です。(数値ならば1、文字列ならば0を返す) DEF SUFFIX(A) RETURN A==0!=3 END これを元にすれば数値の場合の処理と文字列の場合の処理を自動的に判別して実行が可能です。
0そうだね
プレイ済み
返信[10]
親投稿
れい rei-nntnd
おちゃめ氏。 望みの仕様にはなってない。話題ずれてる。 DEFの引数の型があいまいなのは説明書にも書いてあるのでもうみんな知ってる。 ナツキ氏はその次の話、あいまいな型の引数を関数ローカル変数に保存したい、そのために自由に曖昧型の変数を定義したいといってる。 なのにできないから「おしい」と。
1そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
れいさんへ 「引数は数値でも文字列でも問題ない」「数値と文字列は判別可能」ゆえに「(判別を行えば)すでに望み通りのことは可能」 ということです。
0そうだね
プレイ済み
返信[12]
親投稿
れい rei-nntnd
だから、判別を使わずにやりたいと言っているのさ。 判別すれば行けるのは「2種類しかないから方が違うバージョンを…」って書いてあることからもわかるでしょ。
0そうだね
プレイ済み
返信[13]
親投稿
ナツキ natukin1978
数値型と文字列型の判定方法はパッと思い浮かばなかったので、方法を見て目に鱗なんですが、実は型判定についてはあまり興味が無いんです。 くだんの曖昧な引数と同じ型のローカル変数/配列を新たに定義したいのです。
0そうだね
プレイ済み
返信[14]
親投稿
おちゃめ ochame_nako
要するに「できる」「できない」の問題ではなく「標準で対応して欲しい」ということですね。 例えるならば3DSはポリゴン表示ができるハードウェアを持ちながら自前で描画プログラムを作らないとポリゴン表示ができないから「標準命令としてポリゴン用の命令が欲しい」みたいな感じですか。
0そうだね
プレイ済み
返信[15]
親投稿
ナツキ natukin1978
ひょっとしたら表題の実現方法を知っている方が居るのでは!? と思って投稿してみたのですが…… 方法が無いとなると、もはや言語仕様拡張の要望という事になっちゃいますね。
0そうだね
プレイ済み
返信[16]
親投稿
マギー M191246
意味を取り違えているかも知れませんけど CCCの中の配列Gの型が『曖昧』になります。
3そうだね
プレイ済み
返信[17]
親投稿
ナツキ natukin1978
スゴいのキター 軽く動かした感じ動いてる!? (FNはFNSという関数名になりました)
0そうだね
プレイ済み
返信[18]
親投稿
ナツキ natukin1978
おかげ様で数値/文字配列から値を(二分探索で)検索するfind関数ができました。 私のワガママに付き合って下さった皆さん、ありがとうございました。
0そうだね
プレイ済み
返信[19]
親投稿
ナツキ natukin1978
うーん。こんな方法があるとは…… 勉強になりました。 まだまだ分からない事だらけ。
0そうだね
プレイ済み
返信[20]
親投稿
おちゃめ ochame_nako
れいさんのレスから「自作関数で対応する方法」ではなく「標準対応して欲しいという要望」と解釈してしまいましたが、最初に書こうとしていた自作関数での対応で良かったみたいですね。
0そうだね
プレイ済み
返信[21]
親投稿
ナツキ natukin1978
私が最初に妄想として書いた様な型(?)を標準対応してくれたらベストなのですが、マギーさんが提示して下さったFN関数を使って引数の型と同じ型のローカル配列を定義できたので、目的は達成できたと思います。
0そうだね
プレイ済み
返信[22]
親投稿
れい rei-nntnd
他にも未定義のまま行ける方法あるように思うが 3DSなくなっちゃって試せない。 俺の3DSちゃんどこいったのさ…オロオロ 大腸菌3号って名前付けたから怒っていなくなってしまったのか
0そうだね
プレイ済み
返信[23]
親投稿
ナツキ natukin1978
このトピックはまだ閉じないので、他にも方法がありましたら情報お待ちしてます。 大腸菌3号って…… 分裂して帰ってくるに1票。
1そうだね
プレイ済み
返信[24]
親投稿
おちゃめ ochame_nako
3ヶ月前に作ったものの結局出すタイミングを失ったまま未公開だった「あいまいな形で定義できる変数」を実現するINIT()関数をこちらのトピックスで書きました。 https://miiverse.nintendo.net/posts/AYMHAAACAAADVHkoSL6eyA リスト、公開キーに加えて動作原理の簡単な解説もしているので良かったらご覧になってください。 さらに詳しい解説は「プチコン3号入門講座」に書いています。
1そうだね
プレイ済み
返信[25]
親投稿
ナツキ natukin1978
この質問トピックどうしようかな?と思ってましたが、残してた甲斐がありました。覚えてて下さってありがとうございます。 INIT関数(とSUFFIX関数)便利そうですね。引数の型が曖昧な関数を書くのが捗りそうです。
1そうだね
プレイ済み