Warning message about "initialized constant"

This is part of a script I use that simply ftps a bunch of files over to
a UNIX server at my company. It does work, but, I keep getting a warning
message from RUBY about "rb:20:warning: already initialized constant
BWDFile". The line 20 it's referring to is my line 5 below.

Thanks for any help.

···

-----------------------------------------------------------------------------------
...
1 ftp = Net::FTP.open('quark.bna.com') do |ftp|
2 ftp.login('xxxxxx','xxxxxxxx')
3 ftp.chdir('/xxxxx/xxx/xxd/xxxx')

4 BWDFiles=Dir.glob("*.{pdf,gif}")
5 BWDFiles.each do |BWDFile|
6 ftp.putbinaryfile(BWDFile)
7 FileUtils.rm(BWDFile)
8 end
9 end

--
Posted via http://www.ruby-forum.com/.

Peter Bailey wrote:

This is part of a script I use that simply ftps a bunch of files over to
a UNIX server at my company. It does work, but, I keep getting a warning
message from RUBY about "rb:20:warning: already initialized constant
BWDFile". The line 20 it's referring to is my line 5 below.

[snip]

In Ruby, identifiers starting with uppercase are constants. Constants,
different from variables, are not supposed to change. Thus the
warning, because you try to use a variable as a constant

Additionally, camelCase is usually reserved for class names (as a
convention), it's considered better style to use snake_case, in your
case you are better off using "bwd_file" as the variable name.

t.

···

--
Anton Bangratz - Key ID 363474D1 - http://tony.twincode.net/
fortune(6):
Courage is your greatest present need.

This is part of a script I use that simply ftps a bunch of files over to
a UNIX server at my company. It does work, but, I keep getting a warning
message from RUBY about "rb:20:warning: already initialized constant
BWDFile". The line 20 it's referring to is my line 5 below.

Thanks for any help.
-----------------------------------------------------------------------------------
...
1 ftp = Net::FTP.open('quark.bna.com') do |ftp|
2 ftp.login('xxxxxx','xxxxxxxx')
3 ftp.chdir('/xxxxx/xxx/xxd/xxxx')

4 BWDFiles=Dir.glob("*.{pdf,gif}")
5 BWDFiles.each do |BWDFile|
6 ftp.putbinaryfile(BWDFile)
7 FileUtils.rm(BWDFile)
8 end
9 end

One of the conventions of the Ruby language is that capitalized variable names are considered constants. You can fix your problem by changing BWDFiles to bwd_files and BWDFile (which changes each iteration therefore it isn't constant) to bwd_file. Ruby only CamelCases class names, never variables. If you stick with the conventions, other rubyists reading your code will have an easier time deciphering it.

4 bwd_files=Dir.glob("*.{pdf,gif}")
5 bwd_files.each do |bwd_file|
6 ftp.putbinaryfile(bwd_file)
7 FileUtils.rm(bwd_file)
8 end
9 end

cr

···

On Jun 23, 2006, at 9:55 AM, Peter Bailey wrote:

Variable names beginning with uppercase are treated as constants by
the Ruby interpreter. In the first iteration of the each loop the
line:
  BWDFiles.each do |BWDFile|
assigns to BWDFile the first element of BWDFiles. In the next
iteration it tries to set BWDFiles to the second element but because
BWDFile is a constant it generates the warning.

Farrel

···

On 23/06/06, Peter Bailey <pbailey@bna.com> wrote:

This is part of a script I use that simply ftps a bunch of files over to
a UNIX server at my company. It does work, but, I keep getting a warning
message from RUBY about "rb:20:warning: already initialized constant
BWDFile". The line 20 it's referring to is my line 5 below.

Thanks for any help.
-----------------------------------------------------------------------------------
...
1 ftp = Net::FTP.open('quark.bna.com') do |ftp|
2 ftp.login('xxxxxx','xxxxxxxx')
3 ftp.chdir('/xxxxx/xxx/xxd/xxxx')

4 BWDFiles=Dir.glob("*.{pdf,gif}")
5 BWDFiles.each do |BWDFile|
6 ftp.putbinaryfile(BWDFile)
7 FileUtils.rm(BWDFile)
8 end
9 end

--
Posted via http://www.ruby-forum.com/\.

Anton 'tony' Bangratz wrote:

I hate replying to myself. But yikes:

[snip]

In Ruby, identifiers starting with uppercase are constants. Constants,
different from variables, are not supposed to change. Thus the
warning, because you try to use a variable as a constant

this should read:

"because you try to use a constant as a variable."

Sorry,

t.

···

--
Anton Bangratz - Key ID 363474D1 - http://tony.twincode.net/
fortune(6):
The world is no nursery.
    -- Sigmund Freud

Farrel Lifson wrote:

···

On 23/06/06, Peter Bailey <pbailey@bna.com> wrote:

3 ftp.chdir('/xxxxx/xxx/xxd/xxxx')

Variable names beginning with uppercase are treated as constants by
the Ruby interpreter. In the first iteration of the each loop the
line:
  BWDFiles.each do |BWDFile|
assigns to BWDFile the first element of BWDFiles. In the next
iteration it tries to set BWDFiles to the second element but because
BWDFile is a constant it generates the warning.

Farrel

Thank you to all of you. I guess this is pretty important stuff. Because
I'm a Windows guy, obviously, case has never meant much to me. It's
interesting that I've never run into this problem before. Granted, I've
only been doing RUBY for 3 months or so, but, obviously, all of my
previous variable names must've been lowercase!

Thanks again!

--
Posted via http://www.ruby-forum.com/\.