当你想在ruby中命名一堆类时,你通常会这样做:
# my_namespace.rb
module MyNamespace
class ClassOne
# ...
end
class ClassTwo
# ...
end
# ...
end
具有增加文件中所有代码的缩进级别的不幸副作用。我更愿意做一些事情,比如在文件顶部发出一个有效说明的指令," 此文件中的所有内容都应该在MyNamespace
模块中 "
这可能吗?
注意:我知道我可以保留module
包装但不缩进所有内容,但该解决方案是不可接受的。
答案 0 :(得分:0)
代码的缩进级别是编辑器/ ide的函数。简单的答案是:不要缩进代码。
这只是一个视觉方面,无论视觉效果如何,范围的级别都会增加。
这可以通过利用不同的语法来避免,例如使用范围运算符作为Sergio Tulentsev提到的。
你可以使用eval并读入一个文件,但我认为这会很糟糕,虽然它会修复缩进“问题”。
module General
module_eval "class One end"
module_eval "class Two; p 'Done creating Two'; def self.report(); 'I am in General::Two' ; end; end"
module_eval File.read('three.rb')
end
p General::Two.report
p General::Three.new.report
作为单独的文件three.rb
class Three
def report
"This is #{self.class} and has #{self.class.ancestors}"
end
end
但显然没有什么能够让压痕远离。
我确实认为这是一个有用的工具,可以在阅读时根据缩进来跟踪范围,因此有缩进,因此有缩进,因为缩进确实看起来不像是一种痛苦。当事物流向屏幕右侧时,每个级别有8个空格(制表符表示)会更加恼人。
答案 1 :(得分:-3)
Rubocop会根据Ruby style guide告诉您该怎么做!
编辑:
for(int a=0; a<26; a++)
{
for(int b=0; b<26; b++)
{
for(int c=0; c<26; c++)
{
for(int d=0; d<26; d++)
{
for(int e=0; e<26; e++)
{
for(int f=0; f<26; f++)
{
result[0]=alphabet[a];
result[1]=alphabet[b];
result[2]=alphabet[c];
result[3]=alphabet[d];
result[4]=alphabet[e];
result[5]=alphabet[f];
//printf("result : %s\n candidate %x %x %x %x %x",result,candidate.a,candidate.b,candidate.c,candidate.d,candidate.e);
uint32_t A,B,C,D,E,temp; // var "a" is not "A"
uint32_t w[80]= {0};
// Declarations
A=h0;
B=h1;
C=h2;
D=h3;
E=h4;
导致此Rubocop警告:
# my_namespace.rb
module MyNamespace
class ClassOne
# ...
end
class ClassTwo
# ...
end
# ...
end