将一个函数传递给另一个函数并调用它

唐·P

Ruby中的函数不是一流的对象,但是我希望能够将对一个函数的引用传递到另一个函数中并执行它。如何才能做到这一点?

例子:

def run_a_function_twice(my_function)
  # Call the function once.
  # Call the function again.
end

def say_hello
  puts "HI!"
end

run_a_function_twice(say_hello)

我正在阅读文档,但不确定是否应该尝试使用lambda,proc或call(我只熟悉其他语言的call概念)

乔丹跑步

您可以通过两种不同的方式执行此操作:

  1. 传递方法的名称(通常作为符号,但也可以使用字符串):

    def run_a_method_twice(method_name)
      send(method_name)
      send(method_name)
    end
    
    run_a_method_twice(:say_hello)
    

    这取决于say_hello是否在与相同的范围内可用run_a_method_twice,例如,如果它们都是同一类上的两个实例方法。如果say_hello是在另一个对象上定义的,则应执行例如some_obj.send(:say_hello)

    您可以通过send在方法名称(例如)之后给它们提供参数来为方法提供参数jordan.send(:say_hello, "Donny")

  2. 使用块:

    def yield_to_a_block_twice
      yield
      yield
    end
    
    yield_to_a_block_twice { say_hello }
    

    此语法也适用:

    def call_a_block_twice(&block)
      block.call
      block.call
    end
    

    您应该yield在可能的情况下使用它(更快),但是有时必须能够按名称引用该块(例如,如果您需要将其传递给另一个方法,或者从另一个块中调用它),在这种情况下,是否需要命名参数(即def meth(arg1, arg2, &block_name))。

    对于Ruby新手来说,block,Proc和lambda之间的区别是具有挑战性的,并且已经有很多关于它们的文章-只是谷歌“ Ruby block proc lambda”。这是一篇不错的入门文章:http : //awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C-将参数未知的函数传递给另一个函数,然后调用它

来自分类Dev

如何将一个函数作为参数传递给Perl中的另一个函数,然后调用它?

来自分类Dev

将参数从一个函数传递到另一个而不调用它

来自分类Dev

Python 3将一个函数传递给另一个函数

来自分类Dev

将一个函数的参数传递给另一个函数?

来自分类Dev

Python 3将一个函数传递给另一个函数

来自分类Dev

将一个函数传递给另一个函数的参数

来自分类Dev

如何将一个函数的值传递给另一个函数?

来自分类Dev

将Express函数传递给另一个调用HTTPS createServer的文件

来自分类Dev

使用构造函数将一个类传递给另一个类

来自分类Dev

将一个函数的返回参数值传递给另一个烧瓶

来自分类Dev

PHP将一个类传递给另一个类构造函数

来自分类Dev

我可以将一个函数传递给另一个函数,该函数调用具有依赖性的函数吗?

来自分类Dev

将匿名函数作为唯一参数传递给另一个函数(C ++)

来自分类Dev

如何从传递给CasperJS求值的函数中调用另一个函数

来自分类Dev

我可以将函数调用作为参数传递给另一个函数吗?Python

来自分类Dev

将参数传递给由另一个函数在 R 中通过其名称调用的函数

来自分类Dev

如何在python中将一个函数传递给另一个函数

来自分类Dev

将函数输出作为参数传递给另一个函数

来自分类Dev

将匿名多行函数作为参数传递给另一个函数

来自分类Dev

将模板回调函数传递给另一个模板函数

来自分类Dev

如何将Js函数数组传递给另一个Js函数?

来自分类Dev

将函数数组传递给另一个函数

来自分类Dev

如何将函数输出传递给另一个函数

来自分类Dev

将API请求函数传递给另一个函数GoLang

来自分类Dev

将函数的数据传递给另一个函数

来自分类Dev

将具有不同数量参数的函数传递给另一个函数C ++

来自分类Dev

如何将void函数传递给另一个void函数?

来自分类Dev

如何将tanh函数作为参数传递给另一个函数?

Related 相关文章

  1. 1

    C-将参数未知的函数传递给另一个函数,然后调用它

  2. 2

    如何将一个函数作为参数传递给Perl中的另一个函数,然后调用它?

  3. 3

    将参数从一个函数传递到另一个而不调用它

  4. 4

    Python 3将一个函数传递给另一个函数

  5. 5

    将一个函数的参数传递给另一个函数?

  6. 6

    Python 3将一个函数传递给另一个函数

  7. 7

    将一个函数传递给另一个函数的参数

  8. 8

    如何将一个函数的值传递给另一个函数?

  9. 9

    将Express函数传递给另一个调用HTTPS createServer的文件

  10. 10

    使用构造函数将一个类传递给另一个类

  11. 11

    将一个函数的返回参数值传递给另一个烧瓶

  12. 12

    PHP将一个类传递给另一个类构造函数

  13. 13

    我可以将一个函数传递给另一个函数,该函数调用具有依赖性的函数吗?

  14. 14

    将匿名函数作为唯一参数传递给另一个函数(C ++)

  15. 15

    如何从传递给CasperJS求值的函数中调用另一个函数

  16. 16

    我可以将函数调用作为参数传递给另一个函数吗?Python

  17. 17

    将参数传递给由另一个函数在 R 中通过其名称调用的函数

  18. 18

    如何在python中将一个函数传递给另一个函数

  19. 19

    将函数输出作为参数传递给另一个函数

  20. 20

    将匿名多行函数作为参数传递给另一个函数

  21. 21

    将模板回调函数传递给另一个模板函数

  22. 22

    如何将Js函数数组传递给另一个Js函数?

  23. 23

    将函数数组传递给另一个函数

  24. 24

    如何将函数输出传递给另一个函数

  25. 25

    将API请求函数传递给另一个函数GoLang

  26. 26

    将函数的数据传递给另一个函数

  27. 27

    将具有不同数量参数的函数传递给另一个函数C ++

  28. 28

    如何将void函数传递给另一个void函数?

  29. 29

    如何将tanh函数作为参数传递给另一个函数?

热门标签

归档