我是否认为ENV是哈希
ENV['HOME']
=>'/Users/yozloy'
但是
ENV.class
#=>Object
答案 0 :(得分:4)
它实现了大多数Hash方法,但显然有一些缺失:
[:default, :default=, :default_proc, :default_proc=, :merge!, :merge, :flatten, :compare_by_identity, :compare_by_identity?]
您绝不会考虑使用其中大部分内容,但merge
和flatten
可能会有用。
请记住,ENV
并不完全是哈希,而是围绕环境变量以及检索和设置它们的相关方法的包装。
答案 1 :(得分:4)
CRuby消息来源告诉你hash.c
envtbl = rb_obj_alloc(rb_cObject);
rb_extend_object(envtbl, rb_mEnumerable);
...
/*
* ENV is a Hash-like accessor for environment variables.
*
* See ENV (the class) for more details.
*/
rb_define_global_const("ENV", envtbl);
因此虽然它是一个普通的对象,envtbl
可以像哈希一样对待,尽管某些方法如tadman所述缺失。