新手问题 Ruby 中冒号有多少种意思?

caiqinghua · May 31, 2015 · Last by dandananddada replied at June 01, 2015 · 11461 hits

一、问题

module Spree
  class Order < Spree::Base
    PAYMENT_STATES = %w(balance_due checkout completed credit_owed failed paid pending processing void).freeze
    SHIPMENT_STATES = %w(backorder canceled partial pending ready shipped).freeze

    extend FriendlyId
    friendly_id :number, slug_column: :number, use: :slugged

中 slug_column 后面的冒号什么意思?是 hash key 吗? :key => value == key: value 这一行整体怎么解释?

已经求助亚飞,理解了 friendly_id( :number, {slug_column: :number, use: :slugged})

二、理解 symbol "some_string".object_id == "some_string".object_id #=> false :some_string.object_id == :some_string.object_id #=> true

这些冒号让我很困惑 https://ruby-china.org/topics/15540

三、跟在后面的冒号 跟在后面的冒号表示什么意思?比如 routes.rb 里的"to:"里的冒号 https://ruby-china.org/topics/17907 还有 migration 里的”index:“等等, 在前面是 symbol,但跟在后面是什么意思?

答案::key => value == key: value 只是语法糖而已

四、where to use colon (:) and where to not use it? https://www.ruby-forum.com/topic/2551601 https://ruby-china.org/topics/25706

五、ruby 中冒号还有哪些用法?

三元操作符

a >  b ? a : b 

之前在 stackoverflow 回答过一个问题,和你的问题很相似:http://stackoverflow.com/questions/30315021/colon-placement-in-ruby-on-rails/30315118#30315118

Symbol,等同于枚举类型,你当变量看就行(实在不行就当字符串看,但是本质上不同要清楚)。 一般可变化的字符串用 String,固定值或者表示符的时候用 Symbol 就行,相比 String 节省内存支出。

#3 楼 @dandananddada hash tks,hash key 一般用 symbol 吧?

#4 楼 @caiqinghua 恩,我给你摘录下手里 Ruby Programing 这本教材的介绍: 符号和字符串很相似,符号也是对象,一般作为名称标签来使用,用来表示方法等对象的名称。 符号能实现的功能大部分字符串也能实现,单散列键这样只是判断是否相等的处理,符号会比字符串更高效。 另外符号可以与字符串相互转化。 总上你可以理解为符号就是:+字符串的组合,但是如我之前说的,在内存和效率上比字符串要更优,所以一般定值的 key 用 Symbol。你上面列举的 hash 也好,route 里的 to 也好,其实都是一个字符串。只是用 Symbol 来存储了,目的就是减少开支,提供效率。

You need to Sign in before reply, if you don't have an account, please Sign up first.