首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用.zero?而不是==0?

使用.zero?而不是==0?
EN

Stack Overflow用户
提问于 2015-06-27 06:29:14
回答 2查看 97关注 0票数 2

我是遗漏了一些简单的东西,还是在不应该使用的情况下使用.zero?

这样做是可行的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(1..100).each do |num|
  puts(num%15==0 ? "FizzBuzz" : num%5==0 ? "Buzz" : num% 3==0 ? "Fizz" : num)
end

这并不是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(1..100).each do |num|
  puts(num%15.zero? "FizzBuzz" : num%5.zero? "Buzz" : num% 3.zero? "Fizz" : num)
end

当我使用第二个代码块时,我会得到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
syntax error, unexpected tSTRING_BEG, expecting keyword_end
...o ? "FizzBuzz" : num%5.zero?  "Buzz" : num%3.zero?  "Fizz" :...
syntax error, unexpected ':', expecting keyword_end
...zzBuzz" : num%5.zero?  "Buzz" : num%3.zero?  "Fizz" : num
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-27 06:45:49

三元操作符使用?zero?中的问号是方法名称的一部分,而不是三元运算符。另外:zero?方法分别在15、5、3上执行,而不是在num%15等上执行。下面是正确的版本。第一个版本要干净得多。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(1..100).each do |num|
  puts((num%15).zero? ? "FizzBuzz" : (num%5).zero? ? "Buzz" : (num% 3).zero? ? "Fizz" : num)
end
票数 3
EN

Stack Overflow用户

发布于 2015-06-27 09:25:14

在Ruby中,不鼓励使用多个三元语句来提供复杂的条件测试。它会导致难以阅读和维护的代码。而不是使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(1..100).each do |num|
  puts(num%15==0 ? "FizzBuzz" : num%5==0 ? "Buzz" : num% 3==0 ? "Fizz" : num)
end

使用这样的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(1..100).each do |num|
  response = if num % 15 == 0
              'FizzBuzz'
            elsif num % 5 == 0
              'Buzz'
            elsif num % 3 == 0
              'Fizz'
            else
              num
            end
  puts response
end

或者更好的方法是使用case语句来消除链接的elsif

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(1..100).each do |num|
  response = case 
             when num % 15 == 0
               'FizzBuzz'
             when num % 5 == 0
               'Buzz'
             when num % 3 == 0
               'Fizz'
             else
               num
             end
  puts response
end

通过这种方式可以很容易地看到正在发生的事情,查看有条件的测试,并确定在代码中断时返回的值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31089808

复制
相关文章
Prometheus 服务的自动发现使用
前面我们了解了 Prometheus 中 Relabeling 重新标记的使用,本文我们将学习 Prometheus 中是如何使用服务发现来查找和抓取目标的。我们知道在 Prometheus 配置文件中可以通过一个 static_configs 来配置静态的抓取任务,但是在云环境下,特别是容器环境下,抓取目标地址是经常变动的,所以用静态的方式就不能满足这些场景了。所以我们需要监控系统能够动态感知这个变化,不可能每次变动都去手动重新配置的,为了应对复杂的动态环境,Prometheus 也提供了与基础设施中的服务发现集成的功能。
我是阳明
2021/10/08
5.9K0
SpringCloud服务发现Eureka的使用教程
PS:eureka在springcloud中充当服务注册功能,相当于dubbo+zk里面得zk,但是比zk要简单得多,zk可以做得东西太多了,包括分布式锁,分布式队列都是基于zk里面得四种节点加watch机制通过长连接来实现得,但是eureka不一样,eureka是基于HTTPrest来实现的,就是把服务的信息放到一个ConcurrentHashMap中,然后服务启动的时候去读取这个map,来把所有服务关联起来,然后服务器之间调用的时候通过信息,进行http调用。eureka包括两部分,一部分就是服务提供者(对于eureka来说就是客户端),一部分是服务端,客户端需要每个读取每个服务的信息,然后注册到服务端,很明显了,这个服务端就是接受客户端提供的自身的一些信息。
IT架构圈
2021/10/21
4730
SpringCloud服务发现Eureka的使用教程
使用nacos的服务注册与发现
- https://cloud.tencent.com/developer/article/1881623
eeaters
2021/09/24
8160
使用nacos的服务注册与发现
Python | Python 使用 consul 做服务发现
前言一、目标二、使用步骤1. 安装 consul2. 服务注册定义基类具体实现3. 服务发现基类定义具体实现4. 测试用例总结参考
双鬼带单
2021/03/19
4.9K1
Python | Python 使用 consul 做服务发现
SofaBoot使用Nacos进行服务注册发现
最近创业公司的项目组基于业务需要,开发一套新的微服务,考虑到选用的组件必须是主流、社区活跃、生态完善以及方便迁移到云上等因素,引入了SOFAStack全家桶。微服务开发里面,一个很重要的功能就是服务发现与注册,笔者花了点时间做了一个SOFABoot、SOFARpc结合Nacos实现微服务发现注册与远程调用的示例。
Throwable
2020/06/23
1.1K0
SofaBoot使用Nacos进行服务注册发现
Go | Go 使用 consul 做服务发现
我们可以直接使用官方提供的二进制文件来进行安装部署,其官网地址为 https://www.consul.io/downloads
双鬼带单
2020/10/29
2.9K0
Go | Go 使用 consul 做服务发现
徒手教你使用zookeeper编写服务发现
zookeeper的内部是一个key/value存储引擎,key是以树状的形式构成了一个多级的层次结构,每一个节点既可以存储数据,又可以作为一个目录存放下一级子节点。
老钱
2018/08/15
8670
使用IPVS代理模式在Kubernetes中实现负载均衡和服务发现
首先,需要在每个Kubernetes节点上安装和配置IPVS。可以使用以下命令在节点上安装IPVS:
玖叁叁
2023/04/28
6080
在系统中用etcd实现服务注册和发现
在分布式系统中,如何管理节点间的状态一直是一个难题,etcd 是由开发并维护的,它使用 Go 语言编写,并通过Raft 一致性算法处理日志复制以保证强一致性。etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据 TTL 失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态。
KevinYan
2019/11/18
1.7K0
DNS SRV:使用DNS服务器做服务发现
DNS SRV 是 DNS 记录中一种,用来查询指定服务的地址。与常见的A记录、CNAME 不同的是,SRV中除了记录服务器的地址,还记录了服务的端口,并且可以设置每个服务地址的优先级和权重。RFC-2782 给出DNS SRV的建议标准,它是在2000年的时候提出来的。
Debian中国
2020/01/21
11.5K0
使用Consul做服务发现的若干姿势
作者:波斯码 来源:http://blog.bossma.cn/consul/consul-service-register-and-discovery-style/?hmsr=toutiao.io&
程序猿DD
2018/12/06
4.6K0
Kubernetes中如何使用ClusterDNS进行服务发现?
“本文主要介绍了kubernetes网络结构、pod和service之间域名通信”
用户5166556
2020/01/23
1.2K0
Spring Cloud 使用 Nacos 进行服务注册发现
上一篇我们实现了Spring Cloud从nacos server 远端拉取并加载配置。今天我将给大家介绍nacos的另一个重要功能服务注册与发现。服务注册与发现功能在微服务中服务治理的基础。本篇将对nacos的服务治理进行介绍和一些入门使用。
码农小胖哥
2019/12/05
1K0
4、服务发现
本书主要介绍如何使用微服务来构建应用程序,现在是第四章。第一章已经介绍了微服务架构模式,并讨论了使用微服务的优点与缺点。第二章和第三章介绍了微服务间的通信,并对不同的通信机制作出对比。在本章中,我们将探讨服务发现(service discovery)相关的内容。
Java架构师历程
2018/09/26
2.2K0
4、服务发现
SpringBoot使用AOP导致dubbo服务不注册
在搭建SpringBoot项目的时候,原本已经集成了Dubbo并且测试也没问题,在加AOP的时候,发现Dubbo的provider不注册了。说明一下,本着极简原则,Dubbo的provider在这里用@Service注解来发布服务,并没有使用xml配置的方式。 这时用的springboot和dubbo的版本为:
DannyHoo
2019/02/25
1.7K0
[翻译]微服务设计模式 - 5. 服务发现 - 服务端服务发现
服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地址和端口是固定并且提前预知的,所以只需要简单的 HTTP/REST 调用或者其他的 RPC 机制直接调用即可。但是在当下的云原生微服务体系中,微服务大多在某个虚拟机或者某个容器下运行,服务实例数量以及提供服务的地址以及端口都是不固定的,可以理解为,这些服务实例都是临时的。所以,需要实现使服务客户端能够对一组动态变化的临时服务实例发请求的机制。
干货满满张哈希
2021/04/12
7410
[翻译]微服务设计模式 - 5. 服务发现 - 服务端服务发现
服务发现--prometheus
每次启动prometheus都要启动好长的时间,说好的容器秒启动呢。。啊呸,骗子。。。容器的秒启动只不过容器启动了,而真正提供服务的还是里面的进程,所以呢,实际上并不是秒启动。。。
SRE运维实践
2019/07/08
7500
Prometheus:服务发现
mkdir -p /usr/local/prometheus/targets/nodes,docker touch nodes.json touch daemons.json
用户5760343
2020/01/15
6980
服务发现@EnableDiscoveryClient
@EnableEurekaClient只适用于Eureka作为注册;@EnableDiscoveryClient 可以是其他注册中心。 
一个风轻云淡
2022/11/13
8040
服务发现@EnableDiscoveryClient
Etcd 服务发现
此外,discovery URL 应该仅仅用于集群的初始化启动。在集群已经运行之后修改集群成员,阅读 运行时重配置 指南。
用户5760343
2019/10/29
7260

相似问题

获取优惠列表(包括卖方ID)的MWS方法

113

WooCommerce优惠券优惠

10

MWS -如何获得所有优惠的价格

10

为今天的约会获得所有优惠

11

从Amazon Product Advertising API获取所有优惠列表

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文