【问题标题】:Compare complex objects with scala用 scala 比较复杂对象
【发布时间】:2016-02-17 20:35:05
【问题描述】:

我有 IP 地址和 IP 范围。我已经将它们解析成这样的表示:

val patternIP(i1, i2, i3, i4)  
val patternRanges(i1_1, i1_2, i1_3, i1_4, i2_1, i2_2, i2_3, i2_4)

我想比较一下ip 是否在range 中,例如: 6.207.95.2256.207.94.74-6.207.97.36 的范围内 请您向我建议最实用的方法吗?

【问题讨论】:

    标签: scala


    【解决方案1】:

    将 IP 转换为其数字表示。 之后,您的任务就是检查一个数字是否在给定边界内的范围内。

    类似:

      case class Ipv4Address(value: Int) extends AnyVal
    
      def apply(a: Int, b: Int, c: Int, d: Int): Ipv4Address = {
        Ipv4Address((a & 0xff) << 24 | (b & 0xff) << 16 | (c  & 0xff) << 8 | (d & 0xff))
      }
    

    【讨论】:

    • 谢谢,阿列克谢!但是方法uint 做了什么?我在Byte 类中没有看到它
    • 我已经更新了我的答案,但实际上,uint 只是一个定义为a &amp; 0xff 的函数。这是因为 Scala 中的 Byte 是有符号的,因此它不能大于 127。通过这个技巧,我们可以将有符号值转换为无符号值,但我们应该扩大类型,因为值 >127 将不适合字节。
    • 再次感谢!请问最后一个问题,value 参数代表什么?
    • 我不明白这个问题。 value 只是包装它的案例类中的一个字段(以及一个构造函数参数)。我的意思是你可以只返回一个 Int 而没有案例类,但我个人更喜欢在我的类型中显式。
    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    相关资源
    最近更新 更多