Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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 on rails 反向合并返回哈希而不是子类。这是一个Bug还是故意的?_Ruby On Rails - Fatal编程技术网

Ruby on rails 反向合并返回哈希而不是子类。这是一个Bug还是故意的?

Ruby on rails 反向合并返回哈希而不是子类。这是一个Bug还是故意的?,ruby-on-rails,Ruby On Rails,小结:子类。反向合并(类)返回类-而不是子类 我有一个扩展Hash class HtmlOptions < Hash def add_class # add html-class like jQuery … end (a little more) end 使用反向\u合并 input_options = HtmlOptions.new(…) … input_options.merge(id:"ovewrite_id").add_class(

小结:子类。反向合并(类)返回类-而不是子类

我有一个扩展
Hash

class HtmlOptions < Hash
    def add_class 
    # add html-class like jQuery 
    …
    end

    (a little more)
end 
使用
反向\u合并

input_options = HtmlOptions.new(…)
…
input_options.merge(id:"ovewrite_id").add_class("sample") 
input_options = HtmlOptions.new(…)
input_options.reverse_merge(value:"default").add_class("sample")
#crashes
抛出错误(添加未定义的类)

好的,将
HtmlOptions
传递给这两个选项,技巧如下:

input_options.reverse_merge(HtmlOptions.new(value:"default")).add_class("sample")
所以现在我认为这是一个bug,在我的
HtmlOptions
类中纠正它是可以的。因为我想不出这种无声的课堂变革是为了什么

另一方面,如果反向合并的基本思想是严格反向工作,我不应该在我的类中更改它(反向合并的bang版本是错误的)

有人能告诉我我是否有意这样做吗?,(也许能告诉我在哪里使用它?)
或者只是一个bug。

反向合并就是它所说的:反向合并。其主要原因是:

def反向合并(其他散列)
其他_散列合并(自身)
结束
这就是为什么结果是您传入的对象的类,而不是您调用它的对象

我认为最好的选择是为您的
HtmlOptions
类重写
reverse\u merge
;大概是这样的:

def反向合并(其他散列)
新(超级)
结束

当前提供的
reverse\u merge
版本实际上没有将
other\u hash
的内容合并到
self
中。我会用
merge(other_hash){| key,oldval,_newval | old_val}覆盖
reverse_merge