[ruby-list:46143] るびま 標準添付ライブラリ紹介 第3回のサンプル EUC-JPの結果

View: New views
20 Messages — Rating Filter:   Alert me  
< Prev | 1 - 2 - 3 - 4 | Next >

[ruby-list:46253] るびま 標準添付ライブラリ紹介 第3回のサンプル EUC-JPの結果:ruby-list:46252

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

とみたさん

ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]
で、正しくなることを確認しました。
最新に上げたら、確認することが大事ですね。
ありがとうございました。

windows版バイナリは、
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
から、ダウンロードできるのがわかりました。

> とみたです。
> > 結果は、
> >
> >
"\x48\x65\x6c\x6c\x6f\x2c\x20\xa4\xeb\xa4\xd3\xa4\xde\xa1\xaa"は、ruby1.8.7
> > でも
> > 5となりました。
> 最新の 1.8.7-p174 で試すと 2 となります。
> --
> とみたまさひろ <tommy@...>





[ruby-list:46257] MySQL/Ruby segmentation fault

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。

mysqlのテーブル情報を取り出そうとしましたが、
出力の途中で、segmentation fault が生じます。
それぞれを単独で動作させる場合は、正常に取り出せます。

mysql関連は、ruby for apacheにあるmysql.soで、
http://rubyforge.org/projects/rubyforapache/
にありました、July 18,2005 の日付ものです。
O/Sは、wondows-xp Pro ver 2002 SP3 です。

教えていただきたい点は、

1.c コマンドでデバッガを実行したときに、
 c:/ruby/lib/ruby/1.8/rational.rb:78: `undefined method `gcd' となってい
ますが、
 segmentation fault とは、関係ないでしょうか?

2.s コマンドでデバッガを実行すると、途中、
"ruby lib version (1.8.7) doesn't match executable version
(#{RUBY_VERSION})"
がでていますが、segmentation fault と関係ないでしょうか?

3.segmentation faultが発生する原因は、何でしょうか?

デバッグ記録
1.c コマンドで実行

C:\Apache2.2\htdocs\qmsPotalShip\for confirmation & modification>ruby -r
debug myclassMySQLTest.rb
Debug.rb
Emacs support available.

c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10:require 'rubygems'
(rdb:1) c
c:/ruby/lib/ruby/1.8/rational.rb:78: `undefined method `gcd' for
Rational(1, 2):Rational' (NoMethodError)
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1123:in `require'
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1123
        from c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10:in `require'
        from c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10
c:/ruby/lib/ruby/1.8/rational.rb:78:    gcd = num.gcd(den)
(rdb:1) c
Content-Type: text/html

#<Mysql:0xa183008>
13
arcd
chk_dist
chkdb
dist
dmas
 〜〜中略 データベース名・テーブル名の取得・データの取得を実施〜〜
〜テーブルの属性取得を実施〜
6
sendvarchar(50)YES
6
inditinyint(4)YES
6
tnotetextYES
6
snamevarchar(120)YES
6
statetinyint(4)YES
6
myclassMySQLTest.rb:96: [BUG] Segmentation fault
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]


This application has requested the Runtime to terminate it in an unusual
way.
Please contact the application's support team for more information.


2.s コマンドで実行

c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:167:  require 'rbconfig'
(rdb:1) s
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:5:module Config
(rdb:1) s
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:7:    raise "ruby lib version
(1.8.7) doesn't match executable version (#{
RUBY_VERSION})"
(rdb:1) s
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:9:  TOPDIR =
File.dirname(__FILE__).chomp!("/lib/ruby/1.8/i386-mswin32")
(rdb:1) s
c:/ruby/lib/ruby/1.8/i386-mswin32/rbconfig.rb:10:  DESTDIR = TOPDIR &&
TOPDIR[/\A[a-z]:/i] || '' unless defined? DESTDIR





[ruby-list:46258] MySQL/Ruby segmentation fault:ruby-list:46257関連

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。

関連したエラーメッセージを、過去ログ
ruby-dev:32939でみつけました。
gemによるインストールは、一切行ってないのですが、
`undefined method `gcd' for Rational(1, 2):Rational' (NoMethodError)
という同じエラーメッセージが、記載されていました。

デバッガで、必ず通ると思われるポイントを設定したのですが、
エラーのあと、c を実行すると、ブレークポイントは、
スルーされてしまいました。
結果、エラーメッセージが出ました。
対処方法は、あるのでしょうか?

=====ブレークポイント=======
(rdb:1) b
Breakpoints:
  1 [myclassMySQLTest.rb:19]
  2 [myclassMySQLTest.rb:32]
  3 [myclass.rb:3]
  4 [myclass.rb:39]
  5 [myclass.rb:40]

==========実行===================
(rdb:1) c
c:/ruby/lib/ruby/1.8/rational.rb:78: `undefined method `gcd' for
Rational(1, 2):Rational' (NoMethodError)
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1123:in `require'
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1123
        from c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10:in `require'
        from c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10
c:/ruby/lib/ruby/1.8/rational.rb:78:    gcd = num.gcd(den)
(rdb:1) c

Content-Type: text/html #<=この部分が、最初に実行される部分 myclass.rb:3
のBP

#<Mysql:0xa182734>
13
〜略〜

c:/ruby/lib/ruby/1.8/debug.rb:944: [BUG] Segmentation fault
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]


This application has requested the Runtime to terminate it in an unusual
way.
Please contact the application's support team for more information.





[ruby-list:46260] Ruby デバッガ ブレークポイント設定について:ruby-list:46257,ruby-list:46258関連

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。

Rubyのデバッガのブレークポイントを
[ファイル名:ファイル内の行番号]で設定したのですが、
指定したBPでは、とまりませんでした。

そこで、以下を実施し、該当のプログラムに入った時点で、
b nn としたところ、BPでとめることが出来ました。

b [ファイル名:ファイル内の行番号]では、設定できないのでしょうか?

ユーザファイルに入るまで、デバッガのfin,n コマンドで進めて、
ブレークポイントを設定し、デバッグしなければならないのでしょうか?

ファイルは、
C:\Apache2.2\htdocs\qmsPotalShip\confirmation\myclassMySQLTest.rb

ファイル内の行番号は、19

この場合、デバッガ起動後の設定は、
b [C:/Apache2.2/htdocs/qmsPotalShip/confirmation/myclassMySQLTest.rb:19]

または、
b [C:\Apache2.2\htdocs\qmsPotalShip\confirmation\myclassMySQLTest.rb:19]

だと思いますが、ご指導いただきたく、お願いします。

また、デバッガで起動した場合、必ず
c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10:require 'rubygems'
(rdb:1)
が、表示されます。
プログラミング Ruby 言語編 第2版 p139では、Emacsの次の行は、
ユーザファイル(t.rb:・・・・)と記述されています。
此の点につきましても、ご指導いただきますようお願いします。


bpの場所が悪いのか、確認するために、目的のファイルまで、fin、nコマンドで
実行した結果が、以下です。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\M118543>cd
C:\Apache2.2\htdocs\qmsPotalShip\confirmation

C:\Apache2.2\htdocs\qmsPotalShip\confirmation>ruby -r debug
myclassMySQLTest.rb
Debug.rb
Emacs support available.

c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10:require 'rubygems' #必ず表示さ
れます。設定がまずいのでしょうか?
(rdb:1) fin
c:/ruby/lib/ruby/1.8/rational.rb:78: `undefined method `gcd' for
Rational(1, 2):Rational' (NoMethodError)
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1123:in `require'
        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1123
        from c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10:in `require'
        from c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10
c:/ruby/lib/ruby/1.8/rational.rb:78:    gcd = num.gcd(den)
(rdb:1) fin
c:/ruby/lib/ruby/1.8/date.rb:523:    def self.time_to_day_fraction(h, min,
s)
(rdb:1) fin
c:/ruby/lib/ruby/1.8/date.rb:1451:class DateTime < Date #ここから、nコマン
ドで実施
(rdb:1) n
c:/ruby/lib/ruby/1.8/date.rb:1631:class Time
(rdb:1) n
c:/ruby/lib/ruby/1.8/date.rb:1652:class Date
(rdb:1)
     〜〜中略 以降 n で実施〜〜
(rdb:1) n
c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1131:plugins = Gem.find_files
'rubygems_plugin'
(rdb:1) n
c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1133:plugins.each do |plugin|
(rdb:1) w
--> #1 c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1133
(rdb:1) n
myclassMySQLTest.rb:11:require
"C:/Apache2.2/htdocs/qmsPotalShip/myclass.rb" #共通クラス(含むRubyのクラ
ス)#目的のファイル
(rdb:1) b 19 # BPの設定
Set breakpoint 1 at myclassMySQLTest.rb:19
(rdb:1) b 23 # BPの設定
Set breakpoint 2 at myclassMySQLTest.rb:23
(rdb:1) w
--> #1 myclassMySQLTest.rb:11
(rdb:1) c  #実施
Content-Type: text/html

Breakpoint 1, toplevel at myclassMySQLTest.rb:19  #<= 設定した19で停止
myclassMySQLTest.rb:19:mydb =
MyClassDB.db_connect('localhost','root','dbkey','ndesign')
(rdb:1) c
#<Mysql:0xa17f354>
Breakpoint 2, toplevel at myclassMySQLTest.rb:23 # 次の23で停止
myclassMySQLTest.rb:23:res = mydb.list_tables() #テーブル名を返す
(rdb:1) p mydb
#<Mysql:0xa17f354>
(rdb:1) p res
nil
(rdb:1)





[ruby-list:46261] Re: Ruby デバッガ ブレークポイント設定について:ruby-list:46257,ruby-list:46258関連

by Tetsuo Sakaguchi :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

阪口ともうします。とりあえず、1点だけ即応させてもらうと、

In message <OF930C2DD8.D1E9FCE6-ON492575ED.0017E632-49257609.0021649C@...> 2009-08-05T15:04+0900,
        前川 映一 <eiichi_maekawa@...> wrote:
> また、デバッガで起動した場合、必ず
> c:/ruby/lib/ruby/site_ruby/1.8/ubygems.rb:10:require 'rubygems'
> (rdb:1)
> が、表示されます。

環境変数 RUBYOPT が設定されていませんか?

例えば、Windows で One-Click Installer でインストールすると自動的に

RUBYOPT=-rubygems

が追加されます。するとデバッガを用いると上記のようになります。

--
阪口哲男@図書館情報メディア研究科.大学院.筑波大学
Tetsuo SAKAGUCHI.
Graduate School of Library, Information and Media Studies
University of Tsukuba, JAPAN.


[ruby-list:46262] Re: Ruby デバッガ ブレークポイント設定について:ruby-list:46257,ruby-list:46258関連

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。

坂口さん ありがとうございます。

> 環境変数 RUBYOPT が設定されていませんか?
> 例えば、Windows で One-Click Installer でインストールすると自動的に
> RUBYOPT=-rubygems
> が追加されます。するとデバッガを用いると上記のようになります。

確かに、設定されていました。
One-Click Installerで、1.8.6をインストールしています。

環境変数を削除した結果,

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\M118543>cd
C:\Apache2.2\htdocs\qmsPotalShip\confirmation

C:\Apache2.2\htdocs\qmsPotalShip\confirmation>ruby -r debug
myclassMySQLTest.rb
Debug.rb
Emacs support available.

myclassMySQLTest.rb:11:require
"C:/Apache2.2/htdocs/qmsPotalShip/myclass.rb" #共通クラス(含むRubyのクラ
ス)
(rdb:1)

となりました。





[ruby-list:46264] segmentation fault

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。

Mysqlのデータアクセスを行うためのプログラムのデバッグを
していますが、思うように出来ません。

Rubyのデバッガで、ブレークポイントを設定し、変数の内容を
確認しながら、実行すると、最後まで動きます。

しかし、プログラムを直接実行した場合、
また、デバッガで、bpなしでcコマンドで、実行すると、
segmentation fault が生じます。
対処方法について、ご教示ください。

segmentation faultが生じたときの、エラー原因の解析のための
エラー情報の取得要領についても、ご教示願えませんでしょうか。

よろしくお願いします。

実行結果は、以下のとおりです。

111.デバッガで確認しながら実行した結果

〜前略〜

【テーブル情報】
#<Mysql:0x282dc94>
【テーブルフィールド】

〜〜中略〜〜

snotetextYES
6
urlvarchar(250)YES
6
xdwpathvarchar(200)YES
6
edatedatetimeYES

C:\Apache2.2\htdocs\qmsPotalShip\confirmation>


222.直接実行した結果

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\M118543>cd
C:\Apache2.2\htdocs\qmsPotalShip\confirmation

C:\Apache2.2\htdocs\qmsPotalShip\confirmation>myclassMySQLTest_c.rb
#<Mysql:0x283c5a0>
13

〜略〜

【テーブル情報】
#<Mysql:0x282dc94>
【テーブルフィールド】
【DESCRIBE elist】
C:/Apache2.2/htdocs/qmsPotalShip/confirmation/myclassMySQLTest_c.rb:94:
[BUG] Segmentation fault
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]


This application has requested the Runtime to terminate it in an unusual
way.
Please contact the application's support team for more information.

C:\Apache2.2\htdocs\qmsPotalShip\confirmation>


333.デバッガを使うが、確認は一切なし。cコマンドのみで実行

C:\Apache2.2\htdocs\qmsPotalShip\confirmation>ruby -r debug
myclassMySQLTest_c.rb
Debug.rb
Emacs support available.

myclassMySQLTest_c.rb:7:require "mysql" #MySQLライブラリ
(rdb:1) c
#<Mysql:0x28dcf50>
13

〜略〜

データベースの一覧
information_schema
emtest
mysql
ndesign
test
myclassMySQLTest_c.rb:60: [BUG] Segmentation fault
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32]


This application has requested the Runtime to terminate it in an unusual
way.
Please contact the application's support team for more information.

以上



[ruby-list:46265] クラスのメソッドについて

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。

MySQL/Rubyのクラスを元に、自分なりの定義をしたのですが、
(NameError)とエラーとなりました。

私が想像している動作は、@@mydbを特定し、次の処理で、
@@mydb(Mysqlオブジェクト)のqueryを使用して、テーブルの属性を
取得する と考えたのですが・・

class MyClassDB

  def self.db_connect( srvname, usrname, password, dbname)
    @@mydb = Mysql.new(srvname, usrname, password,dbname)
    return @@mydb
  end

  def self.table_fields( table ) # テーブル情報を取得する
    @fields = @@mydb.query( "DESCRIBE #{table}" )
    return @fields
  end

end #MyClassDB 終了

mydb = MyClassDB.db_connect('localhost','root','dbkey','ndesign')
res = MyclassDB.table_fields( 'elist') #<= myclass.rb:54 の行

myclass.rb:54: `uninitialized constant MyclassDB' (NameError)
        from myclass.rb:54
myclass.rb:54:res = MyclassDB.table_fields( 'elist')
(rdb:1)

よろしくお願いします。





[ruby-list:46266] Re: クラスのメソッドについて

by Tetsuo Sakaguchi :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

In message <OF4DE8A936.13ABBBCD-ON4925760B.002C86FD-4925760B.002EBB74@...> 2009-08-07T17:30+0900,
        前川 映一 <eiichi_maekawa@...> wrote:
> mydb = MyClassDB.db_connect('localhost','root','dbkey','ndesign')
> res = MyclassDB.table_fields( 'elist') #<= myclass.rb:54 の行
>
> myclass.rb:54: `uninitialized constant MyclassDB' (NameError)

単純に大文字であるべきところが小文字になっているだけではないですか?
--
阪口哲男@図書館情報メディア研究科.大学院.筑波大学
Tetsuo SAKAGUCHI.
Graduate School of Library, Information and Media Studies
University of Tsukuba, JAPAN.


[ruby-list:46267] Re: クラスのメソッドについて

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。
坂口さん
ありがとうございました。

穴があったら、入りたいです。大文字・小文字、半角・全角スペース
まだまだ、未熟です。本当に、恥ずかしい限りです・・・・・

46264で投げているsegmentation fault どなたか、教えていただけませんか??


Tetsuo Sakaguchi <saka@...> wrote on 2009/08/07 17:36:53:

:
> > mydb = MyClassDB.db_connect('localhost','root','dbkey','ndesign')
> > res = MyclassDB.table_fields( 'elist') #<= myclass.rb:54 の行
> >
> > myclass.rb:54: `uninitialized constant MyclassDB' (NameError)

> 単純に大文字であるべきところが小文字になっているだけではないですか?
> --
> 阪口哲男@図書館情報メディア研究科.大学院.筑波大学



[ruby-list:46281] rubyの変数の扱いについて

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。

rubyは、script言語ということですが、
いまひとつ、理解できていません。

i = 0
while i < 5
  if i == 0
    a = 0
  end
  a = a + i
  i += 1
end
puts a

では、正常に終了しますが、

i = 0
while i < 5
  a = a + i
  i += 1
end
puts a

では、
undefined method `+' for nil:NilClass (NoMethodError)
Complete(1) エラーとなります。

この違いは、i==0の条件で、a = 0 があるかないかですが、

変数aが実体化される場合の動作が、いまいち理解できていません。
よろしくお願いします。






[ruby-list:46282] Re: rubyの変数の扱いについて

by Yousuke Takahashi :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川さん

高橋庸介といいます。
ずっとROMってて初登校です。

結論からすると

i = 0
a = 0
while i < 5
 a = a + i
 i += 1
end
puts a

が正解なのかもしれません。

>  a = a + i
としたときに最初にaがでてきて、aの中身がわからず(未定義状態)、+というメソッドがわからなく、メソッド未定義エラーになった。

上記は、最初に0と数値で初期化してあげて、これからaという変数は数値として使うよ、と宣言しただけです。
a=0 の一文だけ追加しましたが、これで
 if i == 0
   a = 0
 end
があったときと同じ結果にはなっています。

2009/08/17 16:29 に 前川 映一<eiichi_maekawa@...> さんは書きました:

> 前川です。
>
> rubyは、script言語ということですが、
> いまひとつ、理解できていません。
>
> i = 0
> while i < 5
>  if i == 0
>    a = 0
>  end
>  a = a + i
>  i += 1
> end
> puts a
>
> では、正常に終了しますが、
>
> i = 0
> while i < 5
>  a = a + i
>  i += 1
> end
> puts a
>
> では、
> undefined method `+' for nil:NilClass (NoMethodError)
> Complete(1) エラーとなります。
>
> この違いは、i==0の条件で、a = 0 があるかないかですが、
>
> 変数aが実体化される場合の動作が、いまいち理解できていません。
> よろしくお願いします。
>
>
> 了
>
>
>


[ruby-list:46283] Re: rubyの変数の扱いについて

by "(株)ネットフォレスト 植田裕之" :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

植田と申します。


> 前川です。
;

> i = 0
> while i < 5
>   a = a + i
>   i += 1
> end
> puts a
>
> では、
> undefined method `+' for nil:NilClass (NoMethodError)
> Complete(1) エラーとなります。

a が不定(nil) なので

        nil + 0

はできませんよ、と言ってます。


> この違いは、i==0の条件で、a = 0 があるかないかですが、

これは大きな違いですよね。『a = 0』なら

        a + 0 => 0 + 0

ですが、a を初期化していない状態では

        a + 0 => nil + 0

になります。


※ ML に新たな内容を投稿するときは、他のメールへの返信ではなく新規にメー
ルを送ってください。他のスレッドに紛れ込むと結果的に返事を貰いにくくなる
と思います。


-----
株式会社ネットフォレスト            http://www.netforest.ad.jp/
Dr.Web/Vade Retro 担当 植田 裕之   ueda@...
tel:045-663-6277 fax:045-663-6278



[ruby-list:46284] Re: rubyの変数の扱いについて

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。
植田さん、高橋さん

早速の連絡、]ありがとうございます。


> a が不定(nil) なので

> nil + 0

> はできませんよ、と言ってます。

なるほど、納得です。確かに。
C#では、このようなことを回避するために、

int a のような記述(aをintegerとして宣言する)ができたのですが、
このような記述は、rubyにもあると思いますが、では、難しいのでしょうか?

また、string b =""

>
> > この違いは、i==0の条件で、a = 0 があるかないかですが、

> これは大きな違いですよね。『a = 0』なら

> a + 0 => 0 + 0

> ですが、a を初期化していない状態では

> a + 0 => nil + 0

> になります。

>
> ※ ML に新たな内容を投稿するときは、他のメールへの返信ではなく新規にメー
> ルを送ってください。他のスレッドに紛れ込むと結果的に返事を貰いにくくなる
> と思います。

>
> -----
> 株式会社ネットフォレスト            http://www.netforest.ad.jp/
> Dr.Web/Vade Retro 担当 植田 裕之   ueda@...
> tel:045-663-6277 fax:045-663-6278



[ruby-list:46285] Re: rubyの変数の扱いについて

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。
植田さん、高橋さん

早速の連絡ありがとうございます。

植田さん
> a が不定(nil) なので

> nil + 0

> はできませんよ、と言ってます。

高橋さん
> >  a = a + i
> としたときに最初にaがでてきて、aの中身がわからず(未定義状態)、+という
> メソッドがわからなく、メソッド未定義エラーになった。


なるほど、納得です。確かに。
C#では、このようなことを回避するために、
int a のような記述(aをintegerとして宣言する)ができたのですが、
このような記述は、rubyにもあると思いますが、どのように記述すればよいでしょ
うか?
また、string b ="" のような記述は出来ないのでしょうか?

よろしくお願いします。

> ※ ML に新たな内容を投稿するときは、他のメールへの返信ではなく新規にメー
> ルを送ってください。他のスレッドに紛れ込むと結果的に返事を貰いにくくなる
> と思います。

注意します。早速ですが、[ruby-list:46284] は、間違って送信してしまいまし
た。
申し訳ありません。





[ruby-list:46286] Re: [ruby-list:46284 ]_Re:_rubyの変数の扱いについて

by 詫間 陽介 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

変数宣言は無いですね.
なぜなら

a = "1"
p a
a = 1
p a
をしてみてください.

型…とはRubyではいいませんが,変数の型それ自体が変化しているでしょう?

Rubyでは変数にはどのようなインスタンスオブジェクトも代入可能です.

09/08/17 (月曜日) 05:00PM、 "前川 映一" <eiichi_maekawa@...>のメッセージ:

>前川です。
>植田さん、高橋さん
>
>早速の連絡、]ありがとうございます。
>
>
>> a が不定(nil) なので
>
>> nil + 0
>
>> はできませんよ、と言ってます。
>
>なるほど、納得です。確かに。
>C#では、このようなことを回避するために、
>
>int a のような記述(aをintegerとして宣言する)ができたのですが、
>このような記述は、rubyにもあると思いますが、では、難しいのでしょうか?
>
>また、string b =""
>
>>
>> > この違いは、i==0の条件で、a = 0 があるかないかですが、
>
>> これは大きな違いですよね。『a = 0』なら
>
>> a + 0 => 0 + 0
>
>> ですが、a を初期化していない状態では
>
>> a + 0 => nil + 0
>
>> になります。
>
>>
>> ※ ML に新たな内容を投稿するときは、他のメールへの返信ではなく新規にメー
>> ルを送ってください。他のスレッドに紛れ込むと結果的に返事を貰いにくくなる
>> と思います。
>
>>
>> -----
>> 株式会社ネットフォレスト            http://www.netforest.ad.jp/
>> Dr.Web/Vade Retro 担当 植田 裕之   ueda@...
>> tel:045-663-6277 fax:045-663-6278
>
>
>
>



[ruby-list:46287] Re: rubyの変数の扱いについて

by "(株)ネットフォレスト 植田裕之" :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

植田です。


> 前川です。
;

> > a が不定(nil) なので
>
> > nil + 0
>
> > はできませんよ、と言ってます。
>
> なるほど、納得です。確かに。
> C#では、このようなことを回避するために、
>
> int a のような記述(aをintegerとして宣言する)ができたのですが、
> このような記述は、rubyにもあると思いますが、では、難しいのでしょうか?

C# は知りませんが、C でも

        int a;

と書けても、これで

        a = a + 0;

をすると値は不定になりますよね。

------------------------------
ueda@ran[~ ]cat test.c
#include <stdio.h>

int main(void) {
        int a;
        a = a + 0;
        printf("%d\n", a);
        return 0;
}
ueda@ran[~ ]./test
134513520
------------------------------

 なので『変数の型を宣言する』と『変数の初期化をする』の話が混ざっている
と思います。


> また、string b ="" のような記述は出来ないのでしょうか?

 『変数 b は文字列クラスのインスタンスで、初期値は空』という記述であれ


        b = String.new('')

で良いと思います。でも面倒なので私は

        b = ''

と書いてしまいますけど。



-----
株式会社ネットフォレスト            http://www.netforest.ad.jp/
Dr.Web/Vade Retro 担当 植田 裕之   ueda@...
tel:045-663-6277 fax:045-663-6278



[ruby-list:46288] Re: rubyの変数の扱いについて

by Tetsuo Sakaguchi :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

阪口と申します。途中からで失礼します。
(色々と識者からもフォローがあると思いますが。)

In message <OFAA4C06FA.293AAD32-ON49257615.002B095C-49257615.002CA7FE@...> 2009-08-17T17:07+0900,
        前川 映一 <eiichi_maekawa@...> wrote:
> C#では、このようなことを回避するために、
> int a のような記述(aをintegerとして宣言する)ができたのですが、
> このような記述は、rubyにもあると思いますが、どのように記述すればよいでしょ
> うか?
> また、string b ="" のような記述は出来ないのでしょうか?

その辺は「プログラミング言語設計上の理念」の違いですね。
C#のような言語は必要な変数は宣言してから使い、その際にどのデータ型かも
指定するという設計になっていますが、
Ruby は変数の宣言をするための専用の構文はない、という設計になっています。
その代わりに Ruby では「最初の代入文」が宣言を兼ねることになっています。
(これ、実は正確な表現ではないと思いますが、簡単に書いておきます。)
また、変数は特定の型を持たないという設計にもなっています。

なので、「string b = ""」と書かずに「b = ""」と書けば良いわけですね。

蛇足ですが、プログラミング言語によって
    * 変数に型があるかないか
    * 変数宣言の要不要
    * 変数の有効範囲の定め方(scope と extent)
は様々です。一度調べてみると面白いかも知れません。
--
阪口哲男@図書館情報メディア研究科.大学院.筑波大学
Tetsuo SAKAGUCHI.
Graduate School of Library, Information and Media Studies
University of Tsukuba, JAPAN.


[ruby-list:46289] Re: [ruby-list:46284 ]_Re:_rubyの変数の扱いについて

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

詫間さん ありがとうございました。


> 変数宣言は無いですね.
> なぜなら

> a = "1"
> p a
> a = 1
> p a
> をしてみてください.

たしかに、変化しますね。
ということは、aは、定まった型はなく、
入る初期値で、aの型は決まるということですね。

ありがとうございました。



[ruby-list:46290] Re: rubyの変数の扱いについて

by 前川 映一 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

前川です。

植田さん、再々のご連絡ありがとうございます。

> C# は知りませんが、C でも

> int a;

> と書けても、これで

> a = a + 0;

> をすると値は不定になりますよね。

そうでした int a = 0; と記述しますね。

> ------------------------------
> ueda@ran[~ ]cat test.c
> #include <stdio.h>

> int main(void) {
> int a;
> a = a + 0;
> printf("%d\n", a);
> return 0;
> }
> ueda@ran[~ ]./test
> 134513520
> ------------------------------

> なので『変数の型を宣言する』と『変数の初期化をする』の話が混ざっている
> と思います。

確かに、そうです。型の宣言と、初期化を混ぜてます。。恥ずかしい限りです。

>
> > また、string b ="" のような記述は出来ないのでしょうか?

> 『変数 b は文字列クラスのインスタンスで、初期値は空』という記述であれ
> ば

> b = String.new('')

> で良いと思います。でも面倒なので私は

> b = ''

> と書いてしまいますけど。

ありがとうございます。参考になりました。


< Prev | 1 - 2 - 3 - 4 | Next >