2012-02-27 3 views
2

私は新しいクラスを '名前をつけようとしています。私は、使用OCH「const_set」をに関するソムスターターを得た 、私はこれを試しながら、それが正常に動作しますantoherスレッドから変数を使用したObject.const_set

name = "Person" 
attributes = [:fname, :age] 

klass = Object.const_set name, Struct.new(*attributes) 

p = Person.new("John Doe", 42) # => #<struct Person name="John Doe", age=42> 

しかし、今、私は「name'-varibleを使用したいです(..?実際には定数になる)

私はtitleStringと呼ばれる文字列の外側に新たな価値をretreivingよ..

しかし、ときに私はそれを保持している値などを変更するような、異なるビット、その名前を '名前'に渡そうとする。

name = "#{titleString}" 
attributes = [:fname, :age] 

klass = Object.const_set name, Struct.new(*attributes) 

i "は間違った定数名" -error ..来る方法

で終わりますか?

+0

私はこれをirbに貼り付けました。それは私のためにうまくいきました.textStringが最初に設定されたと仮定します。あなたが 'name ="#{titleString} "'や 'name = titleString'や' name = something_that_can_make_a_string.to_s'と言っても違いはありません。 – DGM

答えて

1

getなどの入力からtitleStringを取得していますか? titleStringの最後に改行があります。

> name="Bar\n" 
=> "Bar\n" 
> klass = Object.const_set name, Struct.new(*attributes) 
    NameError: wrong constant name Bar 
+0

ああ、そうかもしれない。ありがとう。 – BSG

+0

正解、空白を削除しても問題ありません。 AAH! :) – BSG

1

nameの値を印刷してconst_setを呼び出す前に、より簡単になります。私の推測では、その名前は大文字で始まらないということです。 Constanstは大文字で始まる必要があります。

+0

いいえ、最初は同じ値を使っています。 – BSG

+0

私の問題は、別のクラスの名前を取得していて、文字列を追加していたことでした。私が始めたクラス名には名前空間があり、名前空間を使うことはできません。 –

関連する問題