메소드를 문자열로 호출하는 방법을 아는 사람이 있습니까? 예 :이름으로 메소드 호출하기
case @setting.truck_identification
when "Make"
t.make
when "VIN"
t.VIN
when "Model"
t.model
when "Registration"
t.registration
.to_sym
이 작동하지 않는 것 같습니다.
메소드를 문자열로 호출하는 방법을 아는 사람이 있습니까? 예 :이름으로 메소드 호출하기
case @setting.truck_identification
when "Make"
t.make
when "VIN"
t.VIN
when "Model"
t.model
when "Registration"
t.registration
.to_sym
이 작동하지 않는 것 같습니다.
사용 .send
:
t.send @setting.truck_identification.downcase
당신은 Object#send
을 사용하려는거야 (작동하는 vin
가와 downcase한다),하지만 당신은 올바른 케이스로 전화를해야합니다 .
[1,2,3].send('length')
=> 3
편집 : 예를 들어 예기치 않은 버그로 이어질 것입니다 나쁜 관행처럼 보인다 때문에 나는 그것을 추천 주저 것이지만 또한, 당신은 방법의 목록을 검색하여 다른 케이스를 처리 할 수 객체 지원.
method = [1,2,3].methods.grep(/LENGth/i).first
[1,2,3].send(method) if method
=> 3
우리는 대소 문자를 구분하지 정규식을 사용하여 모든 방법을 통해 grep을, 어떤이 발견 된 경우 다음 개체에 먼저 반환 기호를 보냅니다.
Object#send
메서드를 사용하면 메서드 이름을 문자열로 전달할 수 있습니다. 예를 들어 :
t.send(@setting.truck_identification)
당신은 String#downcase
방법으로 truck_identification을 정상화해야 할 수도 있습니다.
방법을 통해 그릴 때 가장 깨끗한 방법이 아닙니다. 그냥 사용 #respond_to?()
method = @setting.truck_identification.downcase
if t.respond_to?(method)
t.send(method)
end
깨끗한 방법을 이용해 주셔서 감사합니다. 정말 고마워. –
이 질문은 정당하다, 그것은 변수에 주어진 메서드를 호출하는 방법에 관한 것입니다. – rewritten