考虑以下代码,理想情况下我可以引用Shelf::Things::ThingOne
和Shelf::Things::ThingTwo
:
module Things
class ThingOne
end
end
class Shelf
include Things
module Things
class ThingTwo
end
end
end
Shelf::Things.constants # => [:ThingTwo]
module Things
的第二个宣言覆盖了第一个宣言。是否可以重新打开一个包含的模块,以便更多(例如)类可以嵌套在其中?
编辑:事实证明这并不是我想要回答的问题。我已经要求进行跟进,here
答案 0 :(得分:4)
模块
resolve({nameTaken: true});
的第二个声明覆盖了第一个
不,它没有。 Things
是一个与Shelf::Things
完全无关的模块。
::Things
理想情况下,我可以引用
Things.constants # => [:ThingOne] Shelf::Things.constants # => [:ThingTwo]
和Shelf::Things::ThingOne
Shelf::Things::ThingTwo
但是,正如其他答案中已经暗示的那样,这是非常单一的,这种继承"常量。很可能你为这份工作选择了一个错误的工具,但自we don't know the actual job以来很难说。
答案 1 :(得分:1)
当您将模块包含到类中时,它们的方法包括在内,而不是类。因此,在完成您所做的工作后,您可以使用Things::ThingOne
个实例中Shelf
的方法。
如果要使用Shelf::Things::ThingOne
和Shelf::Things::ThingTwo
,则需要在模块中嵌套两个声明(Ruby中的模块和类可以在多个文件中定义):
# file shelf/things/thing_one.rb
module Shelf
module Things
class ThingOne
end
end
end
# file shelf/things/thing_two.rb
module Shelf
module Things
class ThingTwo
end
end
end
另见this answer。
答案 2 :(得分:0)
看起来你故意重写模块public class MainVM
{
public ObservableCollection<Thingy> Thingies { get; set; }
public ICommand FooCommand { get; set; }
public MainVM()
{
Thingies = new ObservableCollection<Thingy>();
FooCommand = new Command(Bar);
}
private void Bar(object eventArgs)
{
var args = eventArgs as SelectedItemChangedEventArgs;
if (args == null)
return;
var selectedItem = args.SelectedItem;
}
}
,在Things
内嵌套ThingTwo
类,要求ruby在Shelf
类中查找常量。您不必两次声明相同的模块,请尝试:
Shelf
你会得到
module Things
class ThingOne
end
end
class Shelf
include Things
class ThingTwo
end
end