在Ruby中结束嵌套块的效率如何?

在Ruby中结束嵌套块的效率如何?,ruby,nested,Ruby,Nested,在Ruby中,块以保留字end结尾。 嵌套块需要它们自己的端点 var_a = a var_b = b if var_a if var_b ... do something end end 写入时间较短:需要的结束数量: 在Ruby中有这样的功能吗 编辑: 我看人们不赞成这个想法。 然而,一个参数是在endsome_值内使用变量 并具有动态嵌套量。 通过切割多余的嵌套块 我在另一页上发现: ,页面底部是指向的链接 Python允许您用缩进来表示代码块的结束。Ruby有一个极其

在Ruby中,块以保留字end结尾。 嵌套块需要它们自己的端点

var_a = a
var_b = b

if var_a
  if var_b
    ... do something
  end
end
写入时间较短:需要的结束数量:

在Ruby中有这样的功能吗

编辑:

我看人们不赞成这个想法。 然而,一个参数是在endsome_值内使用变量

并具有动态嵌套量。 通过切割多余的嵌套块

我在另一页上发现: ,页面底部是指向的链接

Python允许您用缩进来表示代码块的结束。Ruby有一个极其冗长乏味的块终止符end。很像Lisps最终会有几十个相近的paren,大量使用模块和类的Ruby文件最终会有大量不必要的结尾。 写一个Ruby文件,但是跳过所有的结尾。像在Python中一样排列代码块。然后只需将其命名为“your_file.rbe”,要求“无缝”,并要求“your_file”。其余的都是无缝的。 这会被广泛使用吗?我不知道。但这很有趣


不,这违反了基本ruby语法,并且在解析器级别本身会失败。这与效率无关,这样做不会有任何有意义的性能提升。若你们的意思是额外的努力来写每个块的结尾,那个么在你们最喜欢的文本编辑器中使用插件来完成

注意, 如果您的代码嵌套太多,那么这可能是代码的味道

真的有可能拥有这个功能吗?终值

当然,只要有足够的决心,一切都是可能的。尽管如此,没有一种语言具有这种特性是有原因的。原因是,实际上没有人编写一千个嵌套的ifs,因此这样一个功能的实际好处可以忽略不计,同时在实现和理解方面成本极高

例如,您建议在endx中放置一个不够大的数字将忽略嵌套大于该值的所有块。这是一种我用一英里长的杆子都碰不到的语言。要么我的代码可以正常工作,要么无法解析

但也有一些语言是没有尽头的,嵌套是由缩进控制的。比如python或者coffeescript。所以,如果你为写结尾而烦恼,而你的编辑器却帮不了你,你可以尝试使用这些。您仍然需要密切关注当前输入代码的缩进级别。同一枚硬币,不同的一面。

我不知道有哪种语言有这一特点。在我看来,这将是一个糟糕的语言设计

听起来您来自python背景,这与ruby空格敏感不同。认为这是一种理想的语言特性有一定的优点,但目前还不能在ruby中实现

有趣的是,你不是第一个提出这个想法的人

或:

或:

或:

或者,这应该是折叠语法:

module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5 
          p :small
fuuuuu

那是不可能的,感谢上帝。事实上,这在我听说的每一种语言中都是不可能的。如果你需要,你会有严重的嵌套问题。而链接端是你最不关心的:还要澄清,在什么方面效率高?@SergioTulentsev或当然它是可能的;整个代码应该是一个字符串,用eval包围,以['end']*100.join';'结尾@一些。1000级-即使是上帝也帮不了你,如果你手写的话。对于代码生成,这不是问题,这是一个很好的观点。这些天谁甚至用手工写end?我的编辑为我插入了它们,并密切关注@azbc的平衡折叠语法。恕我直言,我并没有立即放弃它。我甚至向您提供了一些关于其他人以前是如何考虑它的研究,以及其他建议的语法形式。如果您遵循该链接,您还将发现ENNND语法的MRI实现。这基本上回答了你的问题是的,这是可能的。如果你把它添加到核心语言解析器中,我对糟糕设计的看法主要是因为这是一个毫无意义的特性。如果您的代码只是嵌套的,例如2层深,那么end2没有多大帮助;同时,如果你的代码有100层那么你会遇到更大的问题@汤姆·洛德-是的,对不起,我这么说不太好,你确实给了我很多帮助,谢谢你:
value = query
if var_a
  if var_b
    ... do something
end(value)
module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5 
          p :small
        ennnnnd
 module MyModule
   class MyClass
     def my_method
       10.times do
         if rand < 0.5
           p :small
 eeeeeeeeend
         ^^^ <- same place of original "end"!
module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5 
          p :small
endmodule
module MyModule
   class MyClass
     def my_method
       10.times do
         if rand < 0.5
           p :small
end!
module MyModule
  class MyClass
    def my_method
      10.times do
        if rand < 0.5 
          p :small
fuuuuu