草庐IT

cp_struct

全部标签

Ruby:在 Struct 中定义常量的语法

考虑以下(正确的)Ruby程序:classOuterInner=Struct.new(:dummy)doCONST='abce'deffunputs(dummy)endendendobj=Outer::Inner.new(15)obj.funputs(Outer::CONST)为什么我必须写Outer::CONST而不是Outer::Inner::CONST?我对传递给Struct::new的block的理解是self绑定(bind)到Outer::Inner,事实上,我们可以看到方法(fun)附加到了Inner类;但是CONST显然不是。 最佳答案

ruby - 如何将 JSON 值传递给 Struct Ruby 对象?

给定一个JSON对象{"a":1,"b":2}以及从结构派生的值对象:classA我如何创建一个具有JSON值的A实例?我正在尝试:a=A.new(JSON.parse({a:1,b:2}.to_json).values)=>#但我希望a->1和b->2 最佳答案 尝试使用:a=A.new(*JSON[json].values)a.class#=>A问题是values返回一个数组,但您需要数组的各个元素。使用*将数组“splats”回其组件,当您将值传递给new时,这会让Struct很高兴。编辑:Thiswillfailiftheo

ruby - Data_Wrap_Struct 和销毁顺序

我正在为物理引擎编写一个Ruby扩展。此物理引擎具有链接到世界的body,因此我的Ruby对象是World和Body。主体是使用world->CreateBody构建(在C++中)并使用world->DestroyBody销毁。问题在于RubyGC会先于body破坏世界。所以,当GC销毁物体时,世界不再存在,我得到了一个段错误。我知道我需要在某处为GC标记一些东西(使用rb_gc_mark),但我不知道在哪里。World类非常标准,如下所示:extern"C"voidworld_free(void*w){static_cast(w)->~World();ruby_xfree(w);}e

c - rb_iv_get 和 rb_iv_set 对比。 Data_Wrap_Struct 用于创建自定义类

rb_iv_get和rb_iv_set对比。Data_Wrap_Struct用于自定义类因此,在阅读Ruby扩展API时,我发现Data_Wrap_Struct可以将指针转换为Ruby对象(对吗?)。然而,当我尝试使用is时,我不断收到随机错误等等,所以我有点想切换到类似的东西:voidInit_custom(){//cCustomdeclaredasVALUEhigherinthecodecCustom=rb_define_class("Custom",T_OBJECT);rb_define_method(mTester,"initialize",init_Custom,1);rb_

ruby - 在 Struct 实例中创建动态属性

是否可以在Struct实例中动态创建属性?classPerson 最佳答案 您可以使用OpenStruct:require'ostruct'p=OpenStruct.new(name:"Bilbo")p[:surname]="Jenkins"p.surname#=>"Jenkins" 关于ruby-在Struct实例中创建动态属性,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2

ruby-on-rails - 在执行 gem ... (ArgumentError) 未知编码名称时 - CP720

这个问题在这里已经有了答案:rails4unknownencodingname-CP720(2个答案)关闭6年前。我现在遇到了这个奇怪的错误whileexecutinggem...(ArgumentError)unknownencodingname-CP720当我想运行任何gem命令时,例如geminstallrubygems-update所以当我仔细查看时,我发现有人建议使用此命令将编码更改为1252C:\DevKit>chcp1252c:\DevKit>rubydk.rbinit但在我使用它之后我仍然遇到同样的错误,所以我该如何解决这个问题??????注意:我使用的是windows

ruby - 将 to_hash(或 to_h)方法添加到 Struct 的优雅方式?

我在项目中使用结构而不是简单的哈希来为键值对集合提供语义名称。然而,一旦构建了结构,我就需要输出一个散列值。我在Ruby1.9.3中。示例:MyMeaninfulName=Struct.new(:alpha,:beta,:gamma)dodefto_hashself.members.inject({}){|h,m|h[m]=self[m];h}endendmy_var=MyMeaningfulName.newmy_var.to_hash#->{:alpha=>nil,:beta=>nil,:gamma=>nil}Struct不包含to_hash方法是有原因的吗?这似乎是天作之合,但也许

c++ - 'template<class _Tp> struct std::less' 在不同命名空间中的特化

我专门针对数据类型使用“少”(谓词)。代码如下所示:templatestructstd::less{booloperator()(constDateTimeKey&k1,constDateTimeKey&k2)const{//Somecode...}};编译时(Ubuntu9.10上的g++4.4.1),我收到错误:'templatestructstd::less'在不同命名空间的特殊化我做了一些研究,发现有一个“解决方法”涉及将特化包装在std命名空间中-即将代码更改为:namespacestd{templatestructless{booloperator()(constDateT

c++ - 'template<class _Tp> struct std::less' 在不同命名空间中的特化

我专门针对数据类型使用“少”(谓词)。代码如下所示:templatestructstd::less{booloperator()(constDateTimeKey&k1,constDateTimeKey&k2)const{//Somecode...}};编译时(Ubuntu9.10上的g++4.4.1),我收到错误:'templatestructstd::less'在不同命名空间的特殊化我做了一些研究,发现有一个“解决方法”涉及将特化包装在std命名空间中-即将代码更改为:namespacestd{templatestructless{booloperator()(constDateT

c++ - GCC 接受 `constexpr struct {} s;` 但 Clang 拒绝它。谁是正确的?

以下代码可以使用GCC正常编译:constexprstruct{}s;但Clang拒绝它并出现以下错误:error:defaultinitializationofanobjectofconsttype'conststruct(anonymousstructat…)'withoutauser-provideddefaultconstructor我已经测试了我在https://gcc.godbolt.org/找到的所有GCC和Clang版本。.GCC的每个版本都接受该代码,而Clang的每个版本都拒绝它。不知道在这种情况下哪个编译器是正确的?标准对此有何规定?