2017-06-07 5 views
0

私はルビーファイル(get_java_opts)でメソッドの定義を持って理解することができない - ?ルビーメソッド呼び出し

get_java_opts ? my_java_opts = get_java_opts : my_java_opts = @java_opts 
- を次にもう一つの方法は、この行が何をしているかsyntax- 以下で、この「get_java_opts」メソッドを呼び出します私のルビーから

コードファイル -

def start 
    appdir = "#{@rootdir}/mydir" 
    wo_prop = "#{@rootdir}/app.properties" 
    get_java_opts ? my_java_opts = get_java_opts : my_java_opts = @java_opts 

方法definition-

def get_java_opts 
    yml = "#{@rootdir}/#{@test}.yaml" 
    y = YAML.load_file(yml) if File.exists?(yml) 
    java_opts = y[@app]['java_opts'] rescue "No YAML found" 
end 
+1

であり、 'my_java_opts = get_java_opts || @ java_opts' –

+0

あなたのコードは最終的に文字列 '' No YAML found ''を' my_java_opts'に割り当てることに気づきますか? – Stefan

答えて

3

"3進演算子"と呼ばれます。このライン

get_java_opts ? my_java_opts = get_java_opts : my_java_opts = @java_opts 

Ternary Operator構文はcondition ? true : false

のようなものです。この

if get_java_opts 
    my_java_opts = get_java_opts 
else 
    my_java_opts = @java_opts 
end 
+2

... 'my_java_opts = get_java_opts? 'と書かれていますか? get_java_opts:@ java_opts'からternaryによるDRYは値を返します。 (またはさらに良い 'my_java_opts = get_java_opts || @ java_opts' :) – mudasobwa

+0

@ mudasobwa:あなたのコメントを忍者変更したのですか、最後の部分(' || ')は初めて表示されませんでしたか? :) –

+2

忍者の変更(私は$ 799のためだけにそれを行う方法について32時間のトレーニングコースを販売しています) – mudasobwa

0

と同等であることは、私たちは部品PART A ? PART B : PART C

で私たちの表現を分割してみましょう
例としてget_java_opts ? my_java_opts = get_java_opts : my_java_opts = @java_optsを使用してその作業を理解することができます今、
PART Aget_java_opts、あなたがmy_java_opts = get_java_optsをしたPART B
、およびPART C
あなたはのは、あなたのPART Atrueまたはfalseのいずれかを返していると仮定しましょう

だから今my_java_opts = @java_opts
をしました。
trueリターンPART A場合、その後、PART Bmy_java_opts = get_java_opts
である実行され、PART Aリターン場合falseはその後PART Cmy_java_opts = @java_optsある実行されます。