のは、私は次の文があるとしましょう:2三項演算子文をマージ
@string += @a == @b ? "X" : "Y"
@counter += @a == @b ? 1 : -1
は、1行に文をマージすることが可能ですか?
(。私はルビーで質問をタグ付けしましたが、私はまた、他の言語での三項演算子に興味を持って、私はcodegolfのためのいくつかのトリックを学びたい)
のは、私は次の文があるとしましょう:2三項演算子文をマージ
@string += @a == @b ? "X" : "Y"
@counter += @a == @b ? 1 : -1
は、1行に文をマージすることが可能ですか?
(。私はルビーで質問をタグ付けしましたが、私はまた、他の言語での三項演算子に興味を持って、私はcodegolfのためのいくつかのトリックを学びたい)
あなたがゴルフをしている場合は、これを使用することができます:
string<<?X&&1
が、これは
のように見える広がっ:それは読むには少し難しいので、counter+=a==b ?string<<?X&&1:string<<?Y&&-1
説明のビット、?X
が文字literal表記で
string << ?X && 1
:(?)
構文は疑問符である単一の文字列を、表現する文字リテラルの表記もあり、その単一の文字またはエスケープシーケンスが続きますスクリプトのエンコーディング
に単一のコードポイントに対応してまたちょうどここstring << 'X'
を「通常」の文字列を使用することができますが、それは長い文字だし、ゴルフはすべてに約短いです。
<<
は、文字列を連結するだけです。それはRubyが、それはTypeError: no implicit conversion of Integer into String
をスロー
string += (?X && 1)
だろうと考えてそう&&
よりも優先順位が低いですので、あなたは、そこに+=
を使用することはできません。
それでは、その行の残りの部分は1
を返すだけブール&&
演算子である:あなたが三成分の一部を入力した場合
'some string' && 1 # => 1
ので、あなたは文字列とのために、次に「戻る」1
を連結counter +=
。三項の残りの半分は、等しくない値を持つ同じものです。
はのは、私は次の文があるとしましょう:
Nitpick:ものは文ではありません。彼らは表現です。 Rubyでは、すべてが式であり、ステートメントはありません。
@string += @a == @b ? "X" : "Y" @counter += @a == @b ? 1 : -1
それが1行にステートメントをマージすることは可能ですか?
はい!Rubyでは、それが1行にすべてを書くために常に可能で、改行は決して必要ありません:
をフォーマットする:
@string += @a == @b ? "X" : "Y"; @counter += @a == @b ? 1 : -1
は3例は基本的にあります。単純に書式設定に改行を使用すると、削除することができます。
a +
b
# same as:
a + b
def foo(a, b)
a + b
end
# same as:
def foo(a, b) a + b end
改行記号を式区切り記号として使用すると、別の式区切り記号で置き換えることができます。 ;
:化合物式における発現セパレータとして
foo()
bar()
# same as:
foo(); bar()
def bar
'Hello'
end
# same as:
def bar; 'Hello' end
これは、上記の特別な場合です。
if foo
bar
else
baz
end
# same as:
if foo then bar else baz end
# or:
if foo; bar else baz end
case foo
when bar
baz
when qux
frob
end
# same as:
case foo when bar then baz when qux then frob end
# or:
case foo when bar; baz when qux; frob end
while foo
bar
end
# same as:
while foo do bar end
# or:
while foo; bar end
などなど:複合式では、表現の区切りとしてセミコロンに加えて、代わりに使用できるキーワードもあります。
def bar
'Hello'
end
# same as:
def bar() 'Hello' end
# the parentheses are needed to Ruby knows where the parameter list ends
は、私はあなたがこれらの言語のためのソリューションに興味があるなら、あなたはまた、PythonやPerlのような他の言語との質問にタグを付けることをお勧めしたい:
これは特殊なケースです。 – rubystallion