Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何冻结Ruby引用?_Ruby_Freeze - Fatal编程技术网

如何冻结Ruby引用?

如何冻结Ruby引用?,ruby,freeze,Ruby,Freeze,我使用Object#freeze冻结对象的值。我可以写一个函数来深度冻结一个复杂的对象结构。但这两者都不会阻止我为对象指定新值 $O=cl() $O.thorough_freeze $O[:file] = "makefile" # => TypeError $O[:commands][0] = "clean" # => TypeError $O = "reticulate" # => TypeError 用C我说 int const * con

我使用
Object#freeze
冻结对象的值。我可以写一个函数来深度冻结一个复杂的对象结构。但这两者都不会阻止我为对象指定新值

$O=cl()
$O.thorough_freeze
$O[:file] = "makefile"      # => TypeError
$O[:commands][0] = "clean"  # => TypeError
$O = "reticulate"           # => TypeError
用C我说

int const * const ptr = argv;

如何彻底冻结标识符?

没有办法做到这一点。如果变量是常量(以大写字母开头),则如果尝试重新分配它,但仍会发生重新分配,则会看到警告。e、 g

irb(main):008:0> MyConst = my_obj
=> #<MyClass:0x2b8a66c>
irb(main):009:0> MyConst = my_other
(irb):9: warning: already initialized constant MyConst
=> #<MyClass:0x2b854b4>
irb(main):008:0>MyConst=my_obj
=> #
irb(main):009:0>MyConst=my_other
(irb):9:警告:已初始化常量MyConst
=> #

您必须使用C扩展名中的
rb\u define\u readonly\u变量
函数,例如:

VALUE var;

void Init_my_extension(void) {
  var = Qnil; // set this to the initial value.

  rb_define_readonly_variable("$var", &var);
}
然后,当您尝试从ruby执行此操作时:

$var = 123
你会得到一个错误

NameError: $var is a read-only variable