What is "dynamic constant assignment"

hi, all

today i defined a class like this:
class C
  AB = 10
  def self.set(value)
     AB = value
  end
end
then i got this error: SyntaxError: compile error (irb):10: dynamic constant
assignment.
Constants can be changed after initialization, but what does this error
mean?
Any explanations will be appreciated.

Variable AB is a contant, because it starts with a capital letter.
You can only assign a contant value (or expression) to it, once.

···

2007/8/14, sean liu <seanliugm@gmail.com>:

hi, all

today i defined a class like this:
class C
  AB = 10
  def self.set(value)
     AB = value
  end
end
then i got this error: SyntaxError: compile error (irb):10: dynamic constant
assignment.
Constants can be changed after initialization, but what does this error
mean?
Any explanations will be appreciated.

Alle martedì 14 agosto 2007, Nikos Kanellopoulos ha scritto:

> hi, all
>
> today i defined a class like this:
> class C
> AB = 10
> def self.set(value)
> AB = value
> end
> end
> then i got this error: SyntaxError: compile error (irb):10: dynamic
> constant assignment.
> Constants can be changed after initialization, but what does this error
> mean?
> Any explanations will be appreciated.

Variable AB is a contant, because it starts with a capital letter.
You can only assign a contant value (or expression) to it, once.

That's not true. You can assign a value to a constant more than once, even if
ruby will issue a warning:

irb: 001> A = 1
1
irb: 002> A = 2
(irb):2: warning: already initialized constant A
2

I guess that the 'dynamic constant assignment' means that you can assing to a
constant in a method.

Stefano

···

2007/8/14, sean liu <seanliugm@gmail.com>:

Alle martedì 14 agosto 2007, Nikos Kanellopoulos ha scritto:
> > hi, all
> >
> > today i defined a class like this:
> > class C
> > AB = 10
> > def self.set(value)
> > AB = value
> > end
> > end
> > then i got this error: SyntaxError: compile error (irb):10: dynamic
> > constant assignment.
> > Constants can be changed after initialization, but what does this
error
> > mean?
> > Any explanations will be appreciated.
>
> Variable AB is a contant, because it starts with a capital letter.
> You can only assign a contant value (or expression) to it, once.

That's not true. You can assign a value to a constant more than once, even
if
ruby will issue a warning:

irb: 001> A = 1
1
irb: 002> A = 2
(irb):2: warning: already initialized constant A
2

I guess that the 'dynamic constant assignment' means that you can assing
to a
constant in a method.

And the work around is
def self.set(value)
  const_set("AB". value)
end

Although it might make more sense to do

@AB = 10
def self.AB
  @AB
end

def self.AB=(value)
  @AB = value
end

Stefano

···

On 8/14/07, Stefano Crocco <stefano.crocco@alice.it> wrote:

> 2007/8/14, sean liu <seanliugm@gmail.com>:

"Any explanations will be appreciated."

Ruby does not allow redefinitions of constants
in a method.

···

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

I guess that the 'dynamic constant assignment' means that you can assing
to a
constant in a method.

And the work around is
def self.set(value)
  const_set("AB". value)
end

Or, if you aren't in a class method

def set(value)
self.class.const_set(:AB, value) # can use a symbol
end

Cheers.
-=R

···

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