也许这是一个愚蠢的问题,但我是红宝石的新手,我用Google搜索,发现这些:
proc=Proc.new {|x| deal_with(x)}
a_lambda = lambda {|a| puts a}
但我想要这个:
def forward_slash_to_back(string)
...
def back_slash_to_forward(string)
...
def add_back_slash_for_post(string)
...
...
case conversion_type
when /bf/i then proc=&back_slash_to_forward
when /fb/i then proc=&forward_slash_to_back
when /ad/i then proc=&add_back_slash_for_post
else proc=&add_back_slash_for_post
end
n_data=proc.call(c_data)
但它给了我一个错误。我不知道如何在Ruby中做到这一点,任何人都可以提供帮助? 非常感谢!
答案 0 :(得分:21)
Ruby中很少使用“函数指针”。在这种情况下,您通常会使用Symbol
和#send
代替:
method = case conversion_type
when /bf/i then :back_slash_to_forward
when /fb/i then :forward_slash_to_back
when /ad/i then :add_back_slash_for_post
else :add_back_slash_for_post
end
n_data = send(method, c_data)
如果你真的需要一个可调用对象(例如,如果你想特别使用内联lambda/proc
),你可以使用#method
:
m = case conversion_type
when /bf/i then method(:back_slash_to_forward)
when /fb/i then method(:forward_slash_to_back)
when /ad/i then ->(data){ do_something_with(data) }
else Proc.new{ "Unknown conversion #{conversion_type}" }
end
n_data = m.call(c_data)