IT TIP

매개 변수의 해시를 허용하는 루비 메소드 생성

itqueen 2020. 12. 15. 20:39
반응형

매개 변수의 해시를 허용하는 루비 메소드 생성


나는 이것이 어리석은 질문 일 수 있다는 것을 알고 있지만 매개 변수의 해시를 받아들이는 루비 메서드를 만드는 방법을 모르겠습니다. 내 말은, 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

반응형