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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
toshihiro

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

#1 投稿記事 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です。
Sinryow
記事: 141
登録日時: 2005年5月31日(火) 09:34
お住まい: 北海道
連絡する:

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

#2 投稿記事 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型が代入できることの方がバグであるということになります。
この点についてはバグ報告フォーラムの方で報告しておきました。
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

コード: 全て選択

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

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

コード: 全て選択

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

#4 投稿記事 by Uhsp »

Long にも代入できますし、MakeStr()で文字列化できるので
便利な仕様だと思っていました。
このままで良いような悪いようなと言うより構造上の問題?
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#5 投稿記事 by イグトランス »

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

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

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

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

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

#6 投稿記事 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
のような方法が許可されているらしくて、個人的にはこっちの方がコーディングが楽かな?って思う場面が多いのですが。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#7 投稿記事 by konisi »

コンパイラーに実装するのが簡単かどうかは知りませんが、今まで「省略=Double」として書いていたソースがいきなり変わるとそのユーザー等にとって不便かな?って思ったりします。
そして、コンパイラの内容を書き換えることはけっこう面倒だと思います。
一行一行確実にAs Typeを入れていった方が将来的にいいかと思います。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
toshihiro

#8 投稿記事 by toshihiro »

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