C 在对自己创建的变量执行RARRAY_PTR之前不进行类型检查,这是ruby的错误做法吗

C 在对自己创建的变量执行RARRAY_PTR之前不进行类型检查,这是ruby的错误做法吗,c,ruby,C,Ruby,在ruby RARRAY_PTR()的扩展中,为给定ruby数组返回值*是危险的,因为它不进行类型检查。例如,这可能会导致以下故障: VALUE a= rb_hash_new(); RARRAY_PTR(a)[999]; 有时我会发现自己将数组存储到实例变量中,然后对该实例变量执行RARRAY_PTR()。这可能很危险,因为存在篡改任何对象实例变量的方法。如果有人这样做,我可能会做一件不是数组的事情 依赖他人不更改我的实例变量是一种不好的做法,或者如果ruby解释器出现故障,这是一种错误吗?我

在ruby RARRAY_PTR()的扩展中,为给定ruby数组返回值*是危险的,因为它不进行类型检查。例如,这可能会导致以下故障:

VALUE a= rb_hash_new();
RARRAY_PTR(a)[999];
有时我会发现自己将数组存储到实例变量中,然后对该实例变量执行RARRAY_PTR()。这可能很危险,因为存在篡改任何对象实例变量的方法。如果有人这样做,我可能会做一件不是数组的事情


依赖他人不更改我的实例变量是一种不好的做法,或者如果ruby解释器出现故障,这是一种错误吗?

我不会太担心这一点。如果有人在摆弄你的实例变量,那么他们就要为他们造成的任何损害负责

如果有人在纯Ruby类中将一个实例变量从一个数组更改为一个Fixnum,那么您可能会得到一个;如果他们这样做你的C支持类,他们会得到一个错误


基本上,如果有人想用砖头砸自己的脸,弄乱物体的内部结构,那这不是你的问题。

我不会太担心。如果有人在摆弄你的实例变量,那么他们就要为他们造成的任何损害负责

如果有人在纯Ruby类中将一个实例变量从一个数组更改为一个Fixnum,那么您可能会得到一个;如果他们这样做你的C支持类,他们会得到一个错误


基本上,如果有人想通过摆弄对象的内部来用砖头砸自己的脸,那么这不是你的问题。

这是拥有灵活、动态的运行时的众多权衡之一。您可能不会对自己的方法的返回值进行类型检查,但是可以肯定的是,有人可能会重写这些方法以返回不同的结果。这是他们的问题,而不是你的问题。@d11wtq:是的,你必须信任人们的行为举止,否则你的代码最终会变成一堆难以理解的乱七八糟的
类调用和
响应调用。
调用。这是拥有灵活、动态运行时的众多权衡之一。您可能不会对自己的方法的返回值进行类型检查,但是可以肯定的是,有人可能会重写这些方法以返回不同的结果。这是他们的问题,不是你的问题。@d11wtq:是的,你必须相信人们的行为举止,否则你的代码将变成一堆难以理解的乱七八糟的
呼叫响应。