美文网首页
将方法作为参数传递(Javascript/Ruby)

将方法作为参数传递(Javascript/Ruby)

作者: 李小西033 | 来源:发表于2017-10-07 23:02 被阅读190次

本文展示了在Javascript和Ruby中方法是如何作为参数被传递的。

Javascript

function sayHello(name) {
  console.log("Hello, I am " + name);
}

function execute(someFunction, value) {
  someFunction(value);
}
execute(sayHello, "Lisa");

来看上面这段代码,我们将sayHello作为第一个参数传递给了execute。注意不是sayHello的返回值,而是这个方法本身!
因此sayHello成为了execute内部的变量someFunctionexecute可以通过someFunction()来调用sayHello方法。
当然,sayHello需要接收一个参数,execute调用someFunction时也需要传递一个参数。
或者也可以不提前定义sayHello方法,而是直接将方法体作为匿名函数传给execute

function execute(someFunction, value) {
  someFunction(value);
}
execute(function(name) {
  console.log("Hello, I am " + name);
}, "Lisa");

Ruby

Ruby中的可调用对象可以是block, proc, lambda和method。
对应上面的Javascript实现,Ruby版本的实现可以是这样的。

proc版

say_hello = proc { |name| p "Hello, I am #{name}” }

def execute(say_hello, value)
  say_hello.call(value)
end

execute(say_hello, 'Lisa')

lambda版

say_hello = -> (name) { p "Hello, I am #{name}" }

def execute(say_hello, value)
  say_hello.call(value)
end

execute(say_hello, 'Lisa')

method版

def say_hello(name)
  p "Hello, I am #{name}"
end

def execute(say_hello, value)
  say_hello.call(value)
end

execute(method(:say_hello), 'Lisa')

block的匿名函数版

def execute(value)
  yield(value)
end

execute('Lisa') { |x| p "Hello, I am #{x}" }

相关文章

  • 将方法作为参数传递(Javascript/Ruby)

    本文展示了在Javascript和Ruby中方法是如何作为参数被传递的。 Javascript 来看上面这段代码,...

  • Java8之函数接口

    以方法作为参数传递时,Ruby有proc,C#有Delegate,而JavaScript则更不用说,唯独Java在...

  • Java将方法作为参数传递

    最近在用Java写一套自研爬虫框架,该框架可以通过简单的配置就可以实现目标网站的抓取,不再需要研发人员做开发,业务...

  • 第二课 js类和对象

    函数 js中函数可以作为参数传递 第一种写法 上面代码是将say方法作为参数传递给execute方法 第二种写法 ...

  • js类和对象

    函数 js中函数可以作为参数传递 第一种写法 上面代码是将say方法作为参数传递给execute方法 第二种写法 ...

  • js类和对象

    函数 js中函数可以作为参数传递 上面代码是将say方法作为参数传递给execute方法 第二种写法 第三种写法 ...

  • 将切片作为方法参数进行传递

    在Go语言中,函数参数是按值传递的。当使用切片(slice)作为函数参数时,意味着函数将获得切片的副本:指向基础数...

  • C# 委托(delegate)

    委托是一种引用类型,可以将方法作为参数传递给其他方法,作为参数的这个方法可以是静态方法,实例方法,也可以是匿名方法...

  • java参数的传递

    基本类型作为参数是值传递 引用类型作为参数是引用传递(地址传递) 方法签名 方法签名有两部分组成:方法名和参数类型...

  • java8之行为参数化,你用了吗?

    java8之行为参数化,你用了吗? java8新增加了方法引用::语法(将方法作为参数)。将方法的引用传递进去,可...

网友评论

      本文标题:将方法作为参数传递(Javascript/Ruby)

      本文链接:https://www.haomeiwen.com/subject/juvsyxtx.html