2012-08-29 5 views
3
def wait_for_element_present(element) 
    wait = Selenium::WebDriver::Wait.new(:timeout => 30); 
    wait.until{driver.find_element(element)}; 
end 

, 나는 두 가지 질문이 위의 루비 코드를 살펴 보시기 바랍니다 :Ruby에서 메소드의 매개 변수 목록에서 "=>"기호는 무엇을 의미합니까?

이 (1)에 대해서는

"셀레늄 :: WebDriver :: Wait.new (: 타임 아웃 => 30)"무슨 일이 수행을 여기서 "=>"는 의미합니까? 나는 ": timeout"은 루비 심볼이지만, "=>"과 "30"이라는 값을 사용하면 혼란 스럽다. 루비 상징에 대한 어떤 종류의 속임수인가요?

(2) 해시 권한을 정의 할 때 "=>"기호도 있습니다. Like :

cars = { 
'altima' => 'nissan', 
'camry' => 'toyota', 
'rx7' => 'mazda' 
} 
puts cars['rx7'] => mazda 

여기서 "=>"는 (1)과 동일한 의미입니까?

저는 루비 초보자입니다. 어떤 의견이라도 감사하겠습니다. 미리 감사드립니다!

+0

해시 일뿐입니다. –

답변

5

예, 동일한 의미입니다. 두 경우 모두 해시의 정의입니다. Ruby는 메소드 서명의 마지막 매개 변수 인 경우 해시 리터럴의 중괄호를 생략 할 수 있습니다.

예 : 그것은 단지 해시 마지막 매개 변수에 대한 작동

def my_method a, b, h 
    puts a 
    puts b 
    puts h 
end 


my_method(1, 2, :timeout => 30) 
# my_method(1, 2, timeout: 30) # alternative syntax for ruby 1.9+ 
# >> 1 
# >> 2 
# >> {:timeout=>30} 

참고. 마지막에 여러 개의 해시가있는 경우에는 마지막을 제외한 모든 것에 대해 일반 양식 (중괄호 포함)을 사용해야합니다.

+0

흥미로운 것을 발견했습니다 : http://stackoverflow.com/questions/969900/ruby-on-rails-what-does-the-symbol-mean. 두 번째 대답에서는 "레일 및 다른 루비 코드는 종종 파이썬 같은 다른 언어의 명명 된 인수와 동일한 효과를 얻기 위해 메소드에 매개 변수로 해시를 전달합니다." 명명 된 인수와 동일한 사용법이 여기에 있습니다. Selenium :: WebDriver :: Wait의 생성자에 대해 "timeout"이라는 매개 변수가 있습니까? –

+0

예, 그렇게 말할 수 있습니다. –

+0

감사합니다. 세르지오, 정말로 당신의 도움과 다른 사람들의 대답에 감사드립니다. Ruby는 C#과 매우 다르므로 Ruby 학습에 나와 C# 사고를 너무 많이 가져올 수 없다는 것을 깨닫기 시작합니다. –

1
Selenium::WebDriver::Wait.new(:timeout => 30) 

그것은 인수에 해시를 취

Selenium::WebDriver::Wait.new({:timeout => 30}) 

의 약어입니다.

관련 문제