迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

Ruby 中的 send 方法

作者:迹忆客 最近更新:2023/03/21 浏览次数:

在 Ruby 中,有几种方法可以调用方法。本文将讨论 send 方法的使用及其好处。

在 Ruby 中调用没有 send 方法的方法

通常,我们会使用 . 跟在方法名后面来调用一个对象的方法。

考虑以下示例:

[1, 2, 3].join
=> "123"

在上面的代码片段中,对数组 [1, 2, 3] 调用了 join 方法。使用 . 仅适用于对象的公共方法;调用私有方法是不可能的。

在 Ruby 中使用 send 方法调用私有方法

要调用私有方法,请使用 send 方法。考虑以下代码片段。

class Foo
    private

    def secret
        'secret that should not be told'
    end

    def my_asset(amount, location)
        "I have #{amount}$ in #{location}"
    end
end

Foo.new.secret
Foo.new.my_asset(100, 'the basement')

输出:

NoMethodError: private method 'secret' called for #<Foo>
NoMethodError: private method 'my_asset' called for #<Foo>

我们必须使用 send 方法来调用 private 关键字下定义的方法。

Foo.new.send(:secret)
Foo.new.send(:my_asset, 100, 'the basement')

输出:

=> "secret that should not be told"
=> "I have 100$ in bank"

send 方法的第一个参数是方法名称,可以是字符串或符号。origin 方法的参数也通过第二个和第三个参数接受,依此类推。

在 Ruby 中使用 send 方法在运行时调用方法

当有存储方法名称的变量时,send 会派上用场。

例子:

class Report
    def format_xml
        'XML'
    end

    def format_plain_text
        'PLAIN TEXT'
    end
end

def get_report_format(extension)
    if extension == 'xml'
        'format_xml'
    else
        'format_plain_text'
    end
end

report_format = get_report_format('xml')
report = Report.new
formated_report = report.send(report_format)

输出:

"XML"

Report 类负责生成上例中的格式。它支持 format_xmlformat_plain_text

我们还有一个名为 get report_format 的方法,它返回 Report 支持的格式。

我们不能使用 . 直接调用 format_xml 的符号。相反,我们必须使用 send 函数:report.send(report format)

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

用 Ruby 解析 XML

发布时间:2023/03/21 浏览次数:112 分类:编程语言

本文展示了如何在 Ruby 中使用 gem nokogiri 解析 XML 文件。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便