编写Ruby而不添加"end"的任何方法?

jiy*_*ong 5 ruby syntax

Ruby是一种美丽的语言,但有一个关键词"结束",我讨厌写很多次.有没有什么方法可以编写简洁的代码而不必每次都写"结束"?

Dig*_*oss 10

好吧,这部分是无响应的,但最初begin ... end是范例.和原来,我的意思是你或我从来没有见过的语言; 像Algol这样有趣的名字.有些语言(FORTRAN,Basic)多年来只有单一语句条件错开.

然后是C,后来,Java出现并接管了这个世界.他们有{..}.那还不错.

Python和其他一些(包括我在Python发明之前写的一个微代码汇编程序)已经尝试使用缩进来进行块结构.很好的解决方案,但显然它不是那么受欢迎.

所有这些都有效,但存在各种问题.

信不信由你,Ruby的语法设计毫无疑问涉及到所有这些其他不完美的死胡同的考虑.

我的建议是:再给它一次机会.

Ruby融合了开创性和技术上的崇拜,Smalltalk并且Lisp具有实用性和实用性Perl.无论出于何种原因,Smalltalk和(((Lisp)))在30年和55年内都没有成功,粗略地说,Perl正在消失.Ruby是迄今为止最流行的最先进的语言.

未来是Ruby(以及Python和JavaScript)和人们喜欢Ruby有一个原因.其中一个原因是真正用户友好的语法.

相信我,替代方案更糟糕.

继续尝试!


Mar*_*une 7

实际上你根本不需要end写Ruby来编写Ruby:

Foo = Class.new {
  define_method(:bar) {
      puts "I don't recommend this"; \
      return 42 \
    if (:what_is_going_on?)
  }
}

Foo.new.bar # => 42
Run Code Online (Sandbox Code Playgroud)

期待其他Rubyist读取你的代码,想知道你的想法是什么,但......

没有任何可能性的另一种可能性end取代end了你最喜欢的角色所有可怕的:

# encoding: utf-8

define_singleton_method(:_){|code|
  eval(code.gsub("?", "e\156d"))
}

_ <<-EOC
  class Foo
    def bar
      if :what_is_going_on?
        puts "I don't recommend this either"
        return 42
      ?
    ?
  ?
  p Foo.new.bar  # => 42
EOC
Run Code Online (Sandbox Code Playgroud)

或者_用您自己的解析器替换,end根据缩进生成s!

  • 哇,太神奇了! (2认同)