2012-03-11 1 views
2

end区切り文字をRubyに書き込む必要があるのはなぜですか? PythonやCoffeeScriptのようにインデントから解釈できないのですか?そうでない場合Rubyの `end`区切り文字は重複していますか?

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

4分で4回、ワウ! ) – knut

+0

@knut:それは簡単な質問です:) –

+0

@knutここに4つの質問があります! :) 1.スペースとインデント(十分な答え)。 2.それは将来可能でしょうか? (ない!); 3.回避策はありますか? 4. Rubyにコンパイルする言語はありますか? (誰かがインデントからエンドまでコンバーターを作ろうと思っているかもしれません;おそらくOP?) –

答えて

2

Rubyのスペースは重要ではありません。したがって、コードブロックの開始と終了を明確にマークする必要があります。 (私は、まさにこの理由のためにそれを好きではない:重大なスペース

これはあなたに構文上のオーバーヘッドのように見える場合、あなたは、Pythonをご覧ください:)

2

理由はのちょうど味です言語デザイナー(Matzから始まる)。多くの人がインデントベースの言語を好きではありません。それにもかかわらず、Rubyの世界ではHAMLやCoffeescriptのようなもののほうがかなり成功していることが分かりました。

それにもかかわらず、Ruby自体はおそらくインデントベースにはなりません。その機能を備えた汎用言語を使いたい場合は、Coffeescript(Javascriptにコンパイルする)かPythonのいずれかを見てください。

+0

私はHAMLが大好きです*それ以外のものはすべてインデントベースです。ほとんどの場合、 'end'がどこにあるのかコメントを書いています。そうでなければ、すべてが不均衡に見えるからです。 –

+0

いくつかはそれを愛し、いくつかそれを憎む。私は以前の人生でPythonプログラマーでしたので、問題はありません:)(でも私はまだhamlを好んでいます) –

1

Rubyがインデントに注意を払った場合、インデントから推測できます。今日の最も一般的な言語は、Pythonが大きな例外であり、意味的に重要な字下げを持っていません。

2

これは言語設計の選択肢です。あなたがスペースベースのブロック区切り文字を好きなら、Pythonを使います。

+0

私はPythonを認識していますので、私はそれを質問しました。私は、これがどの言語を使用するかの決定要因になるとは思わない。私はSinatraをRubyに使用することに興味がありました。唯一残しておきたいのは、過度の 'end'区切り文字(そしておそらく数々の構文に違いがあります)です。私は 'end'デリミタを使用しない言語を探しているわけではありません。Rubyで回避する方法を探しています。 –

+1

@BillyMoonでは、 'do' ...' end'の代わりに中括弧 '{'と '}'を使うことができますが、_withblocks_のみです。それらは 'def'、' class'、 'module'などでは使用できません。 –

2

私はそれが冗長だと同意するが、現在はその周りの唯一の方法は、(私はあなたが、これはもっと恐ろしいであることに同意します推測している)の代わりに中括弧を使用することです:

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

は同意しましたが、考えてくれてありがとう –

0

一部の言語が行いますちょうどその(特にHaskellとPython)しかし、下側は、冗長な情報が少ないのでインデントを正規化する方がはるかに扱いにくいということです。また、タブとスペースの使用は、個人的な好み(および作業後のバーでの議論)とは対照的に、重要な聖戦の問題になることを意味します。

関連する問題