Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是Ruby';s`end`分隔符是否多余?_Ruby_Syntax - Fatal编程技术网

是Ruby';s`end`分隔符是否多余?

是Ruby';s`end`分隔符是否多余?,ruby,syntax,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 类字符串 颜色。每个do |颜色、代码| 定义_u方法“in_35;

为什么需要用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
类字符串
颜色。每个do |颜色、代码|
定义_u方法“in_35;{color}”do
“#{self}”
结束
结束
结束
在我看来,这样会更好

class String
  COLORS.each do |color,code|
    define_method "in_#{color}" do
      "<span style=\"color: ##{code}\">#{self}</span>"
类字符串
颜色。每个do |颜色、代码|
定义_u方法“in_35;{color}”do
“#{self}”

如果没有,将来是否可能,或者是否有任何解决办法?有没有编译成Ruby的语言(比如CoffeeScript编译成JS)?

在Ruby空间中没有什么意义。所以,需要清楚地标记代码块的开始和结束位置


如果这看起来像是一种语法开销,那么您应该看看Python:)(我不喜欢它的确切原因是:重要的空格)

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


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

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

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

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

类字符串
颜色。每个{|颜色,代码|
在{color}中定义_方法{
“#{self}}}”
结束

有些语言确实做到了这一点(特别是Haskell和Python),但缺点是,像这样规范化缩进要困难得多,因为冗余信息较少。这也意味着标签与空格的使用将成为一场重要的圣战,而不仅仅是个人喜好(以及下班后在酒吧里的讨论)。

Wow,4分钟后4个答案!对这个问题的评论;)@克努特:这是一个简单的问题:)@克努特这里有4个问题!:)1.空格与缩进(足够的答案);2.将来可能吗?(不是!);3.有什么解决办法吗?四,。有没有编译成Ruby的语言?(有人可能想做一个从缩进到结尾的对话;也许是OP?)谷歌搜索parse.y famtour和LOL。除了缩进基础,我喜欢HAML的一切。我几乎总是把注释放在
结尾处,因为否则一切看起来都很不平衡。有些人喜欢,有些人讨厌。我前生是一名Python程序员,所以我对此没有问题:)(尽管我仍然更喜欢erb而不是haml)同意,但感谢您的想法我了解Python,因此我在问题中提到了它。我不认为这会成为使用哪种语言的决定性因素。我对在Ruby中使用Sinatra很感兴趣,唯一让我感到不快的是过多的
end
分隔符(可能还有一些非传统的语法)。我不是在寻找一种不使用
end
分隔符的语言,我是在寻找一种在Ruby中避免它的方法。@Billymon,你可以使用大括号–
{
}
–而不是
do
<代码>结束
,但仅带块。它们不能与
def
模块
等需要关闭
结束的部件一起使用。
class String
  COLORS.each { |color,code|
    define_method "in_#{color}" {
      "<span style=\"color: ##{code}\">#{self}</span>" } }
end