トップページ⇒tech
28コメント6KB

VBのVariantってどうよ。

■ このスレッドは過去ログ倉庫に格納されています
0001VBマニアNGNG
Dim a() As Variant
a = Split("1,2,3", ",")
は型不一致エラーになるのに
Dim a As Variant
a = Split("1,2,3", ",")
は型不一致エラーにならない。
こんなVariant型ってなんか不思議?
それとも常識?
0002デフォルトの名無しさんNGNG
うんこだよVariant なんて
C言語でいいだろ・・・もう
0003あんちVBNGNG
そんなもんだろぉ。VBって。
0004あんちVBNGNG
でも、そんないい加減さもVBの良さだよね。
σ(・_・)はだいっ嫌いだけどねぇ。
0005VBファンNGNG
っていうか、1の内容がマジで疑問。
0006デフォルトの名無しさんNGNG
まあ...

Dim a() As Variant
a = Split("1,2,3", ",")

とやられたら、

1. a(0) だけ確保して、それに array("1", "2", "3") を代入。
2. a(0 To 2) を確保して、a(0) = "1": a(1) = "2": a(2) = "3" とする。

のどっちをやったら良いかわかんないからだろうな。

ちなみに、1. なら、 a を配列と宣言する必要ないし、
2. なら Dim a() As String と宣言すりゃ良いだけ。

ついでに言っとくと、単発すれ嫌われるよ。
00072NGNG
俺は、ポケコンでBASICやってんだぞ見習え!
0008デフォルトの名無しさんNGNG
よく理解した上で使うなら、Variant型は便利だし、
コードの見通しもよくなる。
ただし、それもまた至難の業(笑)。
0009デフォルトの名無しさんNGNG
>>7
どうせシャープのポケコンでPJのゲームやってただけだろ?
00101NGNG
疑問がスキーリしました。単発すれ気を付けますです。
0011デフォルトの名無しさんNGNG
a(1, 2)
a(1)(2)
a(1, b(2))

2番目は何?
0012VBファンNGNG
Dim a(1)(2) as String
とかやると、構文エラーになるっしょ?
どういう意味?
00132NGNG
PJってなんだ?
0014デフォルトの名無しさんNGNG
Debug.Print Split("1,2,3", ",")(1)
だと、2が表示される。
0015デフォルトの名無しさんNGNG
そのうち「DelphiのVariantってどうよ。」
とか立てられそうで怖い
0016デフォルトの名無しさんNGNG
ウイルスバスターのキージェネ手にいれたのですが、使い方がよく分かりません。だれか教えて。
0017デフォルトの名無しさんNGNG
>>16
一応通報しておいたよ
0018デフォルトの名無しさんNGNG
タイーホ!
タイーホ!
0019デフォルトの名無しさんNGNG
>>16
その手のソフトにはキージェネのふりをしたスパイウェアってのも
結構あるから気をつけて。変な通信してない?
0020デフォルトの名無しさんNGNG
>>14
なるほど、確かに...

Dim a(0 To 1) As Variant
a(0) = Split("1,2,3", ",")
a(1) = Split("a,b,c", ",")
Debug.Print a(0)(1)
Debug.Print a(1)(0)

とやると、"2" と "a" が表示されるよ。こんな書き方できるとは知らな
かったよ。つーことは...

Dim a As Variant
a = Array(Array(Array(Array(Array("X")))))
Debug.Print a(0)(0)(0)(0)(0)

なんて破廉恥なコードもかけるんだ...。ここまで来ると、一種のポインタ
だな。VB 恐るべし。
0021デフォルトの名無しさんNGNG
演算子を付けると内部的にはバリアントになってる感じ。
カッコを付けるだけでもバリアントになる。
Inet1.Execute の引数は文字型ではなく、バリアントだが、
strURLはダメで、(strURL)ならオッケー。
もちろん、"http://...."もオッケー。
0022デフォルトの名無しさんNGNG
>>21
それは、ちょっと違う。(strURL) とすると式となるから、strURL の
中身が、仮引数の型に変換されるから問題なくなるだけ。
例えば...

Private Sub Bar(ByRef X As Single)
...
End Sub

Private Sub Foo()
 Dim Y As Integer
 Bar Y ' これは、エラーになる
Bar (Y) ' これは、OK
End Sub

と同じ。つーか、これこそ常識だと思うが...。
0023デフォルトの名無しさんNGNG
議論期待あげ

0024デフォルトの名無しさんNGNG
ポケコンジャーナルなつかしい
0025デフォルトの名無しさんNGNG
Variantとはスンバラシィものナリ
0026デフォルトの名無しさんNGNG
Variant逝ってよし!
0027デフォルトの名無しさんNGNG
1じゃないけど、
>>6
>1. a(0) だけ確保して、それに array("1", "2", "3") を代入。
>2. a(0 To 2) を確保して、a(0) = "1": a(1) = "2": a(2) = "3" とする。
>
>のどっちをやったら良いかわかんないからだろうな。

splitの動作は標準では 2 になるはずだぞ。
1は、StringやIntegerでは 2 の動作になるのにVariantはそうならないから
おかしい、と言っているんだと思う

本当にそうならんのかは試してないので知らん
00286NGNG
>>27
> splitの動作は標準では 2 になるはずだぞ。
Split() が配列を確保するわけではないよ。Split("1,2,3", ",") の結果は、
("1", "2", "3") の要素を含んだ配列となるけど、それを Dim A() As Variant
にどう格納するかが問題。String や Integer なら「>>6 の 2 の動作」しか取
りえないから問題ないけど。Variant は 1 と 2 の両方できるから、とりあえず
エラーにしてるいると思う。
■ このスレッドは過去ログ倉庫に格納されています