반응형
매개 변수의 해시를 허용하는 루비 메소드 생성
나는 이것이 어리석은 질문 일 수 있다는 것을 알고 있지만 매개 변수의 해시를 받아들이는 루비 메서드를 만드는 방법을 모르겠습니다. 내 말은, Rails에서 다음과 같은 방법을 사용하고 싶습니다.
login_success :msg => "Success!", :gotourl => user_url
이런 종류의 매개 변수를 받아들이는 메소드의 프로토 타입은 무엇입니까? 어떻게 읽습니까?
해시 구문으로 Ruby 함수에 매개 변수를 전달하면 Ruby는 이것이 목표라고 가정합니다. 그러므로:
def login_success(hsh = {})
puts hsh[:msg]
end
기억해야 할 핵심 사항은 해시 매개 변수가 함수의 마지막 매개 변수 인 경우 해시 문자 {}를 생략 한 구문 만 수행 할 수 있다는 것입니다. 그래서 Allyn이 한 일을 할 수 있습니다. 또한
def login_success(name, hsh)
puts "User #{name} logged in with #{hsh[:some_hash_key]}"
end
그리고 당신은
login_success "username", :time => Time.now, :some_hash_key => "some text"
그러나 해시가 마지막 매개 변수가 아닌 경우 해시 요소를 {}로 둘러싸 야합니다.
Ruby 2.0 에서 키워드 인수의 출현으로 이제 다음을 수행 할 수 있습니다.
def login_success(msg:"Default", gotourl:"http://example.com")
puts msg
redirect_to gotourl
end
Ruby 2.1에서는 기본값을 생략 할 수 있습니다.
def login_success(msg:, gotourl:)
puts msg
redirect_to gotourl
end
호출 될 때 기본값이없는 매개 변수를 제외하면 ArgumentError
단일 인수를 사용하십시오. Ruby는 명명 된 값을 해시로 변환합니다.
def login_success arg
# Your code here
end
login_success :msg => 'Success!', :gotourl => user_url
# => login_success({:msg => 'Success!', :gotourl => user_url})
기본 루비 덕 타이핑 대신 해시를 얻고 싶다면이를 제어해야합니다. 예를 들면 다음과 같습니다.
def login_success arg
raise Exception.new('Argument not a Hash...') unless arg.is_a? Hash
# Your code here
end
참조 URL : https://stackoverflow.com/questions/583423/create-a-ruby-method-that-accepts-a-hash-of-parameters
반응형
'IT TIP' 카테고리의 다른 글
MySQL : FROM 절 제한에서 하위 쿼리로보기 (0) | 2020.12.15 |
---|---|
@@ IDENTITY, SCOPE_IDENTITY (), OUTPUT 및 기타 마지막 ID 검색 방법 (0) | 2020.12.15 |
C #에서 DateTime에 시간 추가 (0) | 2020.12.15 |
HAML 내의 Javascript 내의 Ruby 메서드 (0) | 2020.12.15 |
OpenCV : IplImage와 Mat, 어떤 것을 사용해야합니까? (0) | 2020.12.15 |