programing

루비의 메서드 이름을 사용하여 문자열에서 메서드 호출

closeapi 2023. 5. 31. 15:55
반응형

루비의 메서드 이름을 사용하여 문자열에서 메서드 호출

여기서 그들이 말하는 것을 루비에서 어떻게 해야 합니까?

당신은 물체에 대한 기능을 어떻게 할 것입니까?그리고 글로벌 기능을 어떻게 수행하시겠습니까( 언급된 게시물에 있는 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

반응형