2012-04-18 1 views
0

基本的に私は、特定のURLから解析しているURLのリストを作成しています...この場合、ベースURLはローカル変数urlです。今も元気に動作している...しかし、私はそのリストを持っていたら、私は、メソッドにメソッドmy_listで宣言された配列listの最初の要素を渡したい -Rubyで別のメソッドを実行する際に、あるメソッドのローカル変数を使用するにはどうすればよいですか?

である私は何をしたい、urlmy_listにを渡しますadd_category。私はadd_categoryメソッドで指定した規則あたりlist配列内のすべての単一のURLを変更したい、私はつもりです

def add_category(url) 
    new_url = url + '/web' 
end 

url = 'http://www.someurl.com' 

def my_list(url) 
    root = Nokogiri::HTML(open(url)) 
    list = root.css("a").map do |link| 
     [link.text, link[:href]]   
     end 

end 

my_list(url) 

add_category(list[0]) 

は次のとおりです。

はコードを参照してください。

思考?

答えて

3

外部からメソッドのローカル変数を参照することはできません。彼らは "ローカル"と呼ばれています! :)

あなたのmy_listメソッドは、単に後で使用するリストを生成しているようです。したがって、戻り値をローカル変数(呼び出し元スコープ内)に保存し、必要に応じて使用します。これをチェックしてください:

def add_category(url) 
    url + '/web' 
end 

url = 'http://www.someurl.com' 

def my_list(url) 
    root = Nokogiri::HTML(open(url)) 
    root.css("a").map do |link| 
     [link.text, link[:href]]   
    end 
end 

list = my_list(url) 

new_url = add_category(list[0][1]) 
+0

「url +/web」行の「String to Array」エラーが表示されています。思考? – marcamillion

+0

あなたの 'url'は配列であり、文字列ではありません。何が起きているのかを理解するために、あなたのスクリプトにいくつかのデバッグ印刷を入れてください。 –

+0

ああ.....あなたは正しい。私はそれを理解しました...しかし、なぜ 'url'は配列ですか? 'url = 'いくつかの文字列' 'url'を強く配列にするのではないのですか? – marcamillion

関連する問題