为什么需要在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)?
答案 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),但不足之处在于,对这种缩进进行标准化会更加尴尬,因为冗余信息较少。这也意味着使用标签与空格将成为一场重大的圣战,而不仅仅是个人偏好(以及下班后在酒吧的讨论)。