루비의 메서드 이름을 사용하여 문자열에서 메서드 호출
여기서 그들이 말하는 것을 루비에서 어떻게 해야 합니까?
당신은 물체에 대한 기능을 어떻게 할 것입니까?그리고 글로벌 기능을 어떻게 수행하시겠습니까( 언급된 게시물에 있는 jetxee의 답변 참조)?
코드 예제:
event_name = "load"
def load()
puts "load() function was executed."
end
def row_changed()
puts "row_changed() function was executed."
end
#something here to see that event_name = "load" and run load()
업데이트: 글로벌 방법에 어떻게 접근합니까?아니면 나의 글로벌 기능?
저는 이 추가적인 라인을 시도했습니다.
puts methods
및 load 및 row_change(목록에 없는 경우).
개체에서 함수를 직접 호출하려면 다음과 같이 하십시오.
a = [2, 2, 3]
a.send("length")
# or
a.public_send("length")
예상대로 3을 반환합니다.
또는 모듈 기능의 경우
FileUtils.send('pwd')
# or
FileUtils.public_send(:pwd)
지역적으로 정의된 방법
def load()
puts "load() function was executed."
end
send('load')
# or
public_send('load')
설명서:
세 가지 방법:send
/call
/eval
및 벤치마크
일반적인 호출(참고용):
s= "hi man"
s.length #=> 6
사용.send
s.send(:length) #=> 6
사용.call
method_object = s.method(:length)
p method_object.call #=> 6
사용.eval
eval "s.length" #=> 6
벤치마크
require "benchmark"
test = "hi man"
m = test.method(:length)
n = 100000
Benchmark.bmbm {|x|
x.report("call") { n.times { m.call } }
x.report("send") { n.times { test.send(:length) } }
x.report("eval") { n.times { eval "test.length" } }
}
...메소드 개체를 인스턴스화하는 것은 메소드를 호출하는 가장 빠른 동적 방법이며, eval을 사용하는 속도도 느립니다.
#######################################
##### The results
#######################################
#Rehearsal ----------------------------------------
#call 0.050000 0.020000 0.070000 ( 0.077915)
#send 0.080000 0.000000 0.080000 ( 0.086071)
#eval 0.360000 0.040000 0.400000 ( 0.405647)
#------------------------------- total: 0.550000sec
# user system total real
#call 0.050000 0.020000 0.070000 ( 0.072041)
#send 0.070000 0.000000 0.070000 ( 0.077674)
#eval 0.370000 0.020000 0.390000 ( 0.399442)
크레딧은 세 가지 방법에 대해 조금 더 자세히 설명하고 방법이 존재하는지 확인하는 방법을 보여주는 이 블로그 게시물로 이동합니다.
사용:
> a = "my_string"
> meth = a.method("size")
> meth.call() # call the size method
=> 9
간단하죠?
글로벌에 대해서는, 루비 방식이 그것을 사용하여 검색하는 것이라고 생각합니다.methods
방법.
개인적으로 저는 참조를 작동하도록 해시를 설정한 다음 문자열을 해시에 대한 인덱스로 사용합니다.그런 다음 파라미터를 사용하여 함수 참조를 호출합니다.이렇게 하면 잘못된 문자열이 호출하기 싫은 항목을 호출할 수 없다는 이점이 있습니다.다른 방법은 기본적으로 문자열입니다.이것을 하지 마세요.
PS는 게으르지 말고 실제로 무언가에 연결하는 대신 전체 질문을 타이핑합니다.
언급URL : https://stackoverflow.com/questions/1407451/calling-a-method-from-a-string-with-the-methods-name-in-ruby
'programing' 카테고리의 다른 글
CSS가 있는 Firefox만 대상으로 함 (0) | 2023.05.31 |
---|---|
개체에 키 값 관찰자가 연결되어 있는지 확인하는 방법 (0) | 2023.05.31 |
무언가를 실행하기 전에 모든 이미지가 로드될 때까지 기다리는 jQuery의 공식적인 방법 (0) | 2023.05.26 |
Windows에 PyCrypto를 설치하려면 어떻게 해야 합니까? (0) | 2023.05.26 |
비속성 목록 개체를 NSUserDefaults로 설정하려고 합니다. (0) | 2023.05.26 |