V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
starvedcat
V2EX  ›  Ruby on Rails

ruby 中使用类变量是 bad code style 吗?有没有替代品?

  •  
  •   starvedcat · 2016-11-21 04:43:17 +08:00 · 6147 次点击
    这是一个创建于 2927 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在想给一个类添加一个字符串类变量,但 RubyMine 提示我说不要用 class variable

    那应该用什么方法实现这个目的呢?

    8 条回复    2016-11-21 12:37:53 +08:00
    lightening
        1
    lightening  
       2016-11-21 06:07:09 +08:00
    如果是常量没问题。如果是变量,为什么不用 instance variable 呢?
    lightening
        2
    lightening  
       2016-11-21 06:13:19 +08:00
    先说说你要干什么吧,为什么你觉得自己需要类变量。
    starvedcat
        3
    starvedcat  
    OP
       2016-11-21 07:06:52 +08:00
    @lightening 是常量,就一个字符串
    lightening
        4
    lightening  
       2016-11-21 07:15:50 +08:00   ❤️ 1
    那习惯上用全大写字母表示。这样 RubyMine 应该也就不会提示了。
    ryanzyy
        5
    ryanzyy  
       2016-11-21 07:21:47 +08:00   ❤️ 1
    1 )可以使用 class variable 只要你清楚它是怎么运作的
    2 )常量大写开头即可,需要写在 class 或 module 层面的 scope
    3 )也可以写成: def self.const_str; 'my_string'; end
    msg7086
        6
    msg7086  
       2016-11-21 08:44:01 +08:00
    Constant 没问题。 Variable 会有大问题。
    warrenoo
        7
    warrenoo  
       2016-11-21 12:36:08 +08:00
    首先分析你的使用场景到底要的是常量还是变量。

    - 如果是常量, 示例如下
    class Example
    XXX = "xxxx".freeze
    end

    p Example::XXX

    - 如果是变量,最好不要显式的使用类变量,比如 @@xxx = "xxxx",示例如下
    class Example
    class << self
    attr_accessor :str

    def do_something
    str = "xxxx"
    p str
    end
    end
    end

    最后,如果这个类有没实例化的需求,以上示例中的 class 完全可以替换成 module 来使用
    warrenoo
        8
    warrenoo  
       2016-11-21 12:37:53 +08:00
    代码竟然不能排版。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2656 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:47 · PVG 23:47 · LAX 07:47 · JFK 10:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.