ページ 1 / 1
文字列の連結ができない?
Posted: 2005年12月17日(土) 00:18
by toshihiro
ごくごく簡単な処理なんですが、僕の環境では以下のコードの5行目で
「型が違う」というエラーが吐き出されます。
コード: 全て選択
#console
Dim str1, str2, str3 As String
str1 = "test1"
str2 = "test2"
str3 = str1 + str2
print str3
他の方の環境でもエラーが出ますでしょうか?
エラーの出た環境はWindows2000 SP4+ActiveBasic 4.12.01です。
Re: 文字列の連結ができない?
Posted: 2005年12月17日(土) 00:27
by Sinryow
コード: 全て選択
#console
Dim str1, str2, str3 As String
str1 = "test1"
str2 = "test2"
str3 = str1 + str2
print str3
ABでは,「As ~」が省略された時はDouble型とみなすので,str1とstr2はDouble型になります。
ですので,str1・str2にString型が代入できることの方がバグであるということになります。
この点についてはバグ報告フォーラムの方で報告しておきました。
Posted: 2005年12月17日(土) 00:28
by イグトランス
コード: 全て選択
Dim str1, str2, str3 As String
こうするとstr1とstr2は型が指定されていないと見なされ,
Double型として扱われてしまいます。
なのでこうしてください。
コード: 全て選択
Dim str1 As String, str2 As String, str3 As String
Posted: 2005年12月17日(土) 01:12
by Uhsp
Long にも代入できますし、MakeStr()で文字列化できるので
便利な仕様だと思っていました。
このままで良いような悪いようなと言うより構造上の問題?
Posted: 2005年12月17日(土) 10:21
by イグトランス
おっとSinryowさんとかぶってしまったようですね。
> Long にも代入できますし、MakeStr()で文字列化できるので
> 便利な仕様だと思っていました。
> このままで良いような悪いようなと言うより構造上の問題?
文字列リテラルはBytePtr型のようなのでポインタ型→整数型の変換が働いてしまいます。
その整数型がさらにDouble型へ変換されてしまったのがtoshihiroさんのコードです。
ちなみに全て#strictをつければ警告が出るので,#strictを書く癖をつけるべきだと思います。
お恥ずかしい限りですm(_ _)m
Posted: 2005年12月18日(日) 00:57
by toshihiro
FORTRANの感覚のまま、変数定義を行っていました…↓
本当にスミマセン。
ところで、
全ての変数定義で1対1対応を行う
コード: 全て選択
Dim var1 As variant type, var2 As variant type, var3 As variant type, ...
のような方法の方がコンパイラーの実装が簡単だったりていうのはあったりしますでしょうか?
最近ではVisual BasicなんかでもC言語やFORTRANに近い
コード: 全て選択
Dim var1, var2, var3... As variant type
のような方法が許可されているらしくて、個人的にはこっちの方がコーディングが楽かな?って思う場面が多いのですが。
Posted: 2005年12月18日(日) 01:24
by konisi
コンパイラーに実装するのが簡単かどうかは知りませんが、今まで「省略=Double」として書いていたソースがいきなり変わるとそのユーザー等にとって不便かな?って思ったりします。
そして、コンパイラの内容を書き換えることはけっこう面倒だと思います。
一行一行確実にAs Typeを入れていった方が将来的にいいかと思います。
Posted: 2005年12月19日(月) 01:58
by toshihiro
確かに、現行のソースを将来バージョンに対応させる為には今の構文に合わせた方が得しそうですね。
どうもありがとうございました。