Ruby的`end`分隔符是多余的吗?

时间:2012-03-11 21:28:44

标签: ruby syntax

为什么需要在Ruby中编写end分隔符?是否可以从缩进中解释,如在Python或CoffeeScript中?

class String
  COLORS.each do |color,code|
    define_method "in_#{color}" do
      "<span style=\"color: ##{code}\">#{self}</span>"
    end
  end
end

对我来说看起来好多了

class String
  COLORS.each do |color,code|
    define_method "in_#{color}" do
      "<span style=\"color: ##{code}\">#{self}</span>"

如果没有,将来是否有可能或有任何变通方法?是否有任何编译成Ruby的语言(如CoffeeScript编译成JS)?

6 个答案:

答案 0 :(得分:2)

在Ruby空间中并不重要。因此,需要清楚地标记代码块的开始和结束位置。

如果这看起来像是一个语法开销,那么你应该看看Python :)(我不喜欢它,正是因为这个原因:重要空格

答案 1 :(得分:2)

原因只是语言设计师的品味(从Matz开始)。许多人只是不喜欢基于缩进的语言。鉴于此,有趣的是,其中一些(如HAML或Coffeescript)在更大的Ruby世界中证明是相当成功的。

然而,Ruby本身可能永远不会基于缩进。如果您想使用具有该功能的通用语言,您应该查看Coffeescript(编译为Javascript)或Python。

答案 2 :(得分:2)

这是语言设计的选择。如果您喜欢基于空格的块分隔符,请使用Python。

答案 3 :(得分:2)

我同意它是多余的,但目前唯一的方法就是使用大括号(我猜你会同意这更加可怕):

class String
  COLORS.each { |color,code|
    define_method "in_#{color}" {
      "<span style=\"color: ##{code}\">#{self}</span>" } }
end

答案 4 :(得分:1)

如果Ruby注意缩进,可以从缩进中推断出来。今天大多数流行的语言,Python是一个很大的例外,没有语义上显着的缩进。

答案 5 :(得分:0)

有些语言正是这样做的(特别是Haskell和Python),但不足之处在于,对这种缩进进行标准化会更加尴尬,因为冗余信息较少。这也意味着使用标签与空格将成为一场重大的圣战,而不仅仅是个人偏好(以及下班后在酒吧的讨论)。