加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

你如何使用Ruby块来有条件地执行某些操作?

发布时间:2020-12-17 04:03:55 所属栏目:百科 来源:网络整理
导读:我最近在七周内购买了七种语言一书,并阅读了关于 Ruby的章节.在介绍块的部分(第40页)中,给出了一个代码示例,它说明了为了有条件地执行某些事情而使用块: in_case_of_emergency do use_credit_card panicenddef in_case_of_emergency yield if emergency?end
我最近在七周内购买了七种语言一书,并阅读了关于 Ruby的章节.在介绍块的部分(第40页)中,给出了一个代码示例,它说明了为了有条件地执行某些事情而使用块:

in_case_of_emergency do
  use_credit_card
  panic
end

def in_case_of_emergency
  yield if emergency?
end

这段代码对我来说没什么意义,本书没有提供太多解释.我想知道你们中的一位Ruby大师是否会介意帮助我解决这个问题.

你怎么能同时拥有一个块和一个同名的函数?你怎么定义“紧急情况?”我不能在没有抱怨的情况下在IRB中创建块:

NoMethodError: undefined method `in_case_of_emergency' for main:Object
    from (irb):1
    from :0

您将如何调用此代码来演示它是如何工作的?谢谢!

解决方法

首先:两个订单错误.您需要先定义in_case_of_emergency.

第二:你没有命名块;因此,有两个名为in_case_of_emergency的东西是不正确的.一个是函数定义,第二个是同一函数的函数调用.

所以,一步一步:

def emergency?
  return rand(2) == 0
end

假设你有这个函数,它返回true的一半时间,而错误的一半时间,随机返回. (男孩,这是很多紧急情况!)然后:

def in_case_of_emergency
  yield if emergency?
end

这定义了一个名为in_case_of_emergency的函数.当被调用时,它会执行yield,如果紧急?,这是一个由条件if修改的语句产量.这是语法糖

if emergency?()
  yield
end

请注意,Ruby不需要括号来进行函数调用,因此我们可以删除它们;如果if中只有一个语句,你可以将它写在上面的同一行(不需要结束).

接下来,我们有一个函数调用:

in_case_of_emergency do
  use_credit_card
  panic
end

这会调用我们刚刚定义的函数in_case_of_emergency,将一个块传递给它来执行.这些是由yield执行的两个语句(use_credit_card,panic) – 但只有在紧急情况下?评估为真.

这现在更有意义了吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读