2015-11-25 2 views
0

Я хочу, чтобы запустить функцию в определенной директории, поэтому у меня есть этот код:Как я могу передать IO в функцию эликсира, который передается в другую функцию

def main(args) do 
    args |> directory |> File.cd!(&Cli.run/0) |> IO.puts 
    end 

    def directory([]) do 
    "." 
    end 

    def directory(args) do 
    hd(args) 
    end 

теперь я хочу передать IO в Cli .run, так что я могу проверить это - на данный момент IO используется непосредственно в Cli.run.

Как передать его?

+0

я не совсем уверен, что вы здесь делаете. если вы хотите передать что-то (IO) через cli.run, вам нужно добавить его к аргументам главного 'def main (args, io \\ IO) do ...', а затем перейти к Cli.run ' fn -> Cli.run (io) end' , если вы хотите проверить IO в тестах, есть http://elixir-lang.org/docs/stable/ex_unit/ExUnit.CaptureIO.html#capture_io/1 – manukall

+0

Да , передав анонимную функцию 'fn -> Cli.run (io) end' в' File.cd! ', спасибо. – user2355213

+0

Вы должны оставить правильное решение ответа, чтобы другие, которые искали этот вопрос, могли легко найти его. –

ответ

1

Благодаря manukall, решение передать анонимную функцию File.cd!, как это:

File.cd!(fn -> Openreevoo.Cli.run(IO) end) 
Смежные вопросы