Actually, it looks like either a bug or a behaviorial change in 1.7.2. I
don’t get this error with 1.6.7.
I’ll grab the nightly build and see if that changes anything.
Regards,
Dan
···
-----Original Message-----
From: GOTO Kentaro [mailto:gotoken@notwork.org ]
At Thu, 8 Aug 2002 05:27:27 +0900, > Daniel Berger wrote:
test.rb:3:in `require’: identifier Proto::ProtoStruct needs
to be constant (NameError) from
test.rb:3
void Init_proto()
{
VALUE np_mNet;
np_mNet = rb_define_module(“Net”);
cNetProto = rb_define_class_under(np_mNet,“Proto”,rb_cObject);
sProto =
rb_struct_define(“Proto::ProtoStruct”,“name”,“aliases”,“number”,0);
rb_global_variable(&sProto);
try replacing the last two lines by
sProto =
rb_struct_define(“ProtoStruct”,“name”,“aliases”,“number”,0);
rb_define_const(cNetProto, “ProtoStruct”, sProto);
ts1
(ts)
8 August 2002 13:07
2
rb_struct_define("Proto::ProtoStruct","name","aliases","number",0);
^^^^^^^^^^^^^^^^^^^^
^^
^^
This is this that 1.7 don't like, and I understand it.
> void Init_proto()
^^^^^
^^^^^
Now nobody can write an extension with the name `proto', even if your
extension is called via 'require "net/proto"'
Guy Decoux
Hi,
sProto =
rb_struct_define(“ProtoStruct”,“name”,“aliases”,“number”,0);
rb_define_const(cNetProto, “ProtoStruct”, sProto);
Actually, it looks like either a bug or a behaviorial change in 1.7.2. I
don’t get this error with 1.6.7.
You have to supply a constant name for the first argument, so that
“Proto::ProtoStruct” is not a sufficient name for the struct. 1.7 has
stricter check for names.
If you don’t want define class under Struct
(i.e. Struct::ProtoStruct), you don’t have to give it a name:
sProto = rb_struct_define(0,"name","aliases","number",0);
rb_define_const(cNetProto, "ProtoStruct", sProto);
matz.
···
In message “RE: struct needs to be a constant?” on 02/08/08, “Berger, Daniel” djberge@qwest.com writes: