Ruby是一种优美的语言,但有一个关键词“结束”,我讨厌写很多次。 有没有什么方法可以编写简洁的代码而不必每次都写“结束”?
答案 0 :(得分: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有一个原因。其中一个原因是真正用户友好的语法。
相信我,替代方案更糟糕。
继续尝试!
答案 1 :(得分:6)
实际上你根本不需要编写end
来编写Ruby:
Foo = Class.new {
define_method(:bar) {
puts "I don't recommend this"; \
return 42 \
if (:what_is_going_on?)
}
}
Foo.new.bar # => 42
期待其他Rubyists阅读您的代码,想知道您的想法是什么,但是......
另一种可能没有任何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
或者用您自己的解析器替换_
,该解析器根据缩进生成end
个!