gpt4 book ai didi

Ruby if/else 流程

转载 作者:太空宇宙 更新时间:2023-11-03 18:07:26 31 4
gpt4 key购买 nike

早上好

我开始使用 Ruby,想创建一个小工具来获取我的公共(public) IP 并通过电子邮件发送。我遇到了字符串比较和无法处理的 if/else block 的基本问题。

代码非常简单(见下文)。问题出在第 21 行的字符串比较处。我想要的是,每当 IP 地址与文件中记录的内容发生变化时,新 IP 会覆盖文件中的 IP 地址,以及其他操作(不在当前代码中) 将随之而来。

好像有时候比较没有执行,所以if后面的语句没有执行。

我想知道这是为什么。第 21 行有时已将 if (!oldIP == ip) 更改为 if (oldIP != ip),结果相同。我还怀疑返回值有时会被忽略(死代码路径?)。

这是代码

#!/usr/bin/env ruby

require "net/http"

puts "\e[H\e[2J"

def FetchIPAddress()
oldIP = ""
if File::exists?('/tmp/wanipaddress.txt')
iFile = File.open('/tmp/wanipaddress.txt')
oldIP = iFile.read()
iFile.close()
end

oFile = File.open('/tmp/wanipaddress.txt', "w+")
ip = Net::HTTP.get(URI("https://api.ipify.org"))

puts "old = " + oldIP
puts "new = " + ip

if (!oldIP == ip)
puts "changed"
oFile.puts ip
oFile.close()
else
ip = "unchanged"
puts "unchanged"
end
return ip
end

真的,我确实在这里看到了一些不稳定的行为;我怀疑这只是我是 Ruby 的新手。

最佳答案

您的文件可能包含换行符。

试试这个

if old_ip.chomp != ip.chomp
...
end

chomp 删除尾随换行符。

最好使用 p 打印值以进行调试,这将转义空格,从而使尾随换行符可见。永远不要使用 puts 进行调试。


这就是为什么 !a == b 永远不会工作的原因。

!a == ba.!().==(b)相同,执行如下

  • 首先在对象 a 上调用 ! 方法,对于字符串返回 false
  • 然后在生成的 bool 值上调用 ==(b) 方法
  • 并且由于 bool 值永远不会等于字符串,因此比较总是会失败

关于Ruby if/else 流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41784801/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com