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

Ruby:在方法链中访问调用者

发布时间:2020-12-17 02:04:18 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个Or helper(基于 Not Method by Jay Fields).我想要实现的是: s = ""s.nil? # falses.empty? # trues.nil? || s.empty? # trues.nil?.or.empty? # should == true 我可以访问nil的结果吗?但不是什么输入到零?是. 我明白了: NoMethodErr
我正在尝试编写一个Or helper(基于 Not Method by Jay Fields).我想要实现的是:

s = ""
s.nil?             # false
s.empty?           # true
s.nil? || s.empty? # true
s.nil?.or.empty?   # should == true

我可以访问nil的结果吗?但不是什么输入到零?是.

我明白了:

NoMethodError: undefined method `empty?' for false:FalseClass

这甚至可能吗?

注意:这需要是本机ruby而不是rails!

解决方法

你无法做到这一点.

s.nil的返回值?是true还是false,它们分别是TrueClass和FalseClass的唯一实例.您无法创建这两个类的其他实例.所以你不能修补TrueClass或FalseClass以记住上下文s.你可以定义单例方法或者是true和false,但是,它对s一无所知,所以你不能将另一个谓词链为空?

def true.or other
  true
end

def false.or other
  other
end

您可以使用定义的两个辅助方法编写s.nil?.或(s.empty?).

另一个想法是为所有谓词(blabla?)方法返回一个自定义对象,而不是true或false.然而,在ruby中,只有零和假产生错误,任何其他东西产生真实.您自定义对象的实例将始终为true,这将破坏所有这些谓词方法.

(编辑:李大同)

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

    推荐文章
      热点阅读