文字列の連結ができない?

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 文字列の連結ができない?

by toshihiro » 2005年12月19日(月) 01:58

確かに、現行のソースを将来バージョンに対応させる為には今の構文に合わせた方が得しそうですね。
どうもありがとうございました。

by konisi » 2005年12月18日(日) 01:24

コンパイラーに実装するのが簡単かどうかは知りませんが、今まで「省略=Double」として書いていたソースがいきなり変わるとそのユーザー等にとって不便かな?って思ったりします。
そして、コンパイラの内容を書き換えることはけっこう面倒だと思います。
一行一行確実にAs Typeを入れていった方が将来的にいいかと思います。

お恥ずかしい限りですm(_ _)m

by toshihiro » 2005年12月18日(日) 00:57

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
のような方法が許可されているらしくて、個人的にはこっちの方がコーディングが楽かな?って思う場面が多いのですが。

by イグトランス » 2005年12月17日(土) 10:21

おっとSinryowさんとかぶってしまったようですね。

> Long にも代入できますし、MakeStr()で文字列化できるので
> 便利な仕様だと思っていました。
> このままで良いような悪いようなと言うより構造上の問題?

文字列リテラルはBytePtr型のようなのでポインタ型→整数型の変換が働いてしまいます。
その整数型がさらにDouble型へ変換されてしまったのがtoshihiroさんのコードです。

ちなみに全て#strictをつければ警告が出るので,#strictを書く癖をつけるべきだと思います。

by Uhsp » 2005年12月17日(土) 01:12

Long にも代入できますし、MakeStr()で文字列化できるので
便利な仕様だと思っていました。
このままで良いような悪いようなと言うより構造上の問題?

by イグトランス » 2005年12月17日(土) 00:28

コード: 全て選択

Dim str1, str2, str3 As String
こうするとstr1とstr2は型が指定されていないと見なされ,
Double型として扱われてしまいます。

なのでこうしてください。

コード: 全て選択

Dim str1 As String, str2 As String, str3 As String

Re: 文字列の連結ができない?

by Sinryow » 2005年12月17日(土) 00:27

コード: 全て選択

#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型が代入できることの方がバグであるということになります。
この点についてはバグ報告フォーラムの方で報告しておきました。

文字列の連結ができない?

by toshihiro » 2005年12月17日(土) 00:18

ごくごく簡単な処理なんですが、僕の環境では以下のコードの5行目で
「型が違う」というエラーが吐き出されます。

コード: 全て選択


#console
Dim str1, str2, str3 As String
str1 = "test1"
str2 = "test2"
str3 = str1 + str2
print str3
他の方の環境でもエラーが出ますでしょうか?

エラーの出た環境はWindows2000 SP4+ActiveBasic 4.12.01です。

ページトップ