如何从同一模块内的类调用方法

时间:2019-08-01 19:53:45

标签: crystal-lang

如何从结构或类中调用redis?

class DetVisiModel (
    val idJugador: String,

    @SerializedName("nombre")
    val nombreVisi: String,

    @SerializedName("minuto")
    val minutoVisi: String
)

我尝试了以下操作,但未成功

module A::Cool::Module
  redis = Redis.new(host: ENV["REDIS_DEV_HOST"], port: 18163)
  redis.auth(ENV["REDIS_DEV_AUTH"])

  struct CoolStruct
    def CoolFunciton
       redis # => undefined method 'redis' for A::Cool::Module:Module
    end
  end
end
module A::Cool::Module
  @@redis = Redis.new(host: ENV["REDIS_DEV_HOST"], port: 18163)
  @@redis.auth(ENV["REDIS_DEV_AUTH"])

  struct CoolStruct
    def CoolFunciton
       @@redis # => can't infer the type of class variable '@@redis'
    end
  end
end
module A::Cool::Module
  module DB
     redis = Redis.new(host: ENV["REDIS_DEV_HOST"], port: 18163)
     redis.auth(ENV["REDIS_DEV_AUTH"])
  end


  struct CoolStruct
    include A::Cool::Module::DB
    def CoolFunciton
       redis # => undefined local variable or method 'redis'
    end
  end
end

我真的不知道该怎么做。 而且我不想为每个需要Redis的类创建一个Redis连接。

1 个答案:

答案 0 :(得分:3)

Case在Crystal中很重要。一个模块可以具有常量,在整个模块范围内都可以访问该常量(请注意大写字母):

module A::Cool::Module
  REDIS = ...
  ...
end

(此外,您应该使用snake_case,而不是TitleCase作为方法名称;因此,cool_function,而不是CoolFunction。)