2016-11-06 18 views
1

私は、次の機能があります。2つの関数に依存する関数を返すにはどうすればよいですか?

private func getFunctionToPlot() -> ((Double) -> Double) { 
    var function: (Double) -> Double = sin + cos 
    return function 

} 

を私はダブルを取り、doubleを返す関数を返すしたいと思いますが、この機能はsin + cosようなものでなければなりません。 sinとcosの両方が独立してdoubleを返し、doubleを返しますが、どうすれば返すことができますか?sin($0) + cos($0)

+0

戻り値の型をオプションになりますか?それは確かにコンパイルします。 – matt

+0

@matt、関数が初期化されていないためではありません。また、初期化する方法も知っています。 – lmiguelvargasf

+0

私の答えはあなたに一つの方法を示しています。 – matt

答えて

2

あなたの質問は少し広範ですが、あなたが主張する行はコンパイルされませんをコンパイルしますか?あなたがやっていることに何も問題はありません。唯一の問題は、コードが不完全であることです。

private func getFunctionToPlot() -> ((Double) -> Double) { 
    var function: (Double) -> Double 
    function = {_ in return 2.0} 
    return function 
} 

EDITあなたの改訂質問については、ここであなたが今やろうとしているように見えるものの一種のテスト例です:

func sin(_ d:Double) -> Double {return 1} 
func cos(_ d:Double) -> Double {return 1} 
private func getFunctionToPlot() -> ((Double) -> Double) { 
    let f1: (Double) -> Double = sin 
    let f2: (Double) -> Double = cos 
    return {f1(f2($0))} // or maybe f1($0) + f2($0) 
} 
ここ 完全であることを試験例であります
+0

これは役に立ちます、私はそれを把握する方法のアイデアを持っています – lmiguelvargasf

+0

あなたのループの中にあるアイデアは、他の場所から 'function'に割り当てられる値を取得するかもしれません。あなたがしなければ、コンパイラがそれを渡すことはないので、値を与えてください。 – matt

+0

ありがとうございました。私は少し曖昧だったので少し質問を変更しました – lmiguelvargasf

2

機能にクロージャを割り当てるだけで機能します。 コードスニペットの現在の関数の値は「nil」で、戻り値の型は「オプション」(つまり((Double) - > Double)?)でないため、戻り値の型が一致しません。

1つの可能な方法は、どちらかである機能を割り当てる値:

private func getFunctionToPlot() -> ((Double) -> Double) { 
    var function: (Double) -> Double 
    function = { input in 
     return input * 2 
    } 
    for element in brain.program { 
     // do something 
    } 
    return function 
} 

別のアプローチは、あなたが「これがコンパイルされていない」とはどういう意味ですか

private func getFunctionToPlot() -> ((Double) -> Double)? { 
    var function: ((Double) -> Double)? 
    for element in brain.program { 
     // do something 
    } 
    return function 
} 
関連する問題