• Hash 是 key 跟 value 的配對組合,在 Ruby 如果想要取用 Hash 裡的 value 必須要使用正確的 key 才能取用,拿不正確的 key 是拿不到東西的。hash["key"]hash[:key] 是不同的 key,前面那個 key 是 String,後面那個 key 是 Symbol。

    關於 Ruby 的 Hash,可參考拙作:

    http://railsbook.tw/chapters/06-ruby-basic-2.html#hash_class

    如果想了解什麼是 Symbol,可參考:

    http://railsbook.tw/chapters/06-ruby-basic-2.html#symbol_class

  • Ruby 的 private 和 protected at 2017年07月31日

    其實 send 不能算是除外,send 方法只是傳了 symbol 做為參數而已,並沒有違背 @freefishz 大大所提到的規則定義「不能添加任何显式接收方,包括self」

  • 為你自己學 Ruby on Rails at 2017年07月14日

    哪裡,大家客氣了

  • 可惜跟日本 RubyKaigi 接得太近,不然也許可以去分享個 Elixir 方面的主題 :)

  • 為你自己學 Ruby on Rails at 2017年05月25日

    哈哈,我不是日本人,所以姓氏只有第一個字 ,至於「老師」二字就可以不用了 (但我去日本出差的時候都會自介 私は 高見 と申します 就是了)

  • 為你自己學 Ruby on Rails at 2017年05月24日

    是的,而且我覺得 c9 功能上比 codeanywhere 來得優秀,但缺點就是註冊的時候需要先輸入信用卡號,這點對大部份的人可能不是問題,但我在學校帶課程的時候,常會遇到大學生沒有信用卡的問題而無法使用。倒是 codeanywhere 就沒這困擾了 :)

  • 為你自己學 Ruby on Rails at 2017年05月24日

    有 Mac 電腦是最好,但沒有的話也不會強求。Windows 用戶通常會請他們直接轉用像 https://codeanywhere.com/https://c9.io/ 之類的環境,就以學習上來說沒有什麼太大的問題。

    用 Docker 或虛擬機也是個選項,但對新手來說反而可能造成「為了學 Ruby/Rails 反而得先學會 Docker」的額外負擔

    另外,我之前個人對 Rails Installer 的印象停留在「光是 bundle install 就會報錯」的階段,最近試了一下好像沒這問題了,最近有同學上課是就是使用 Rails Installer,似乎沒出什麼問題。

    供您參考 :)

  • 為你自己學 Ruby on Rails at 2017年05月24日

    對大家有幫助就好 :)

  • 如果你不會在測試的過程中變動你的字串的話,可在文件的最前面加上一行

    # frozen_string_literal: true
    

    這一行讓整份文件的字串都變成 immutable (設定成 freeze 狀態),可加快一點點點點點點點點的速度 :)

  • 一、Ruby 的方法呼叫,常常會適時的省略小括號:

    例如

    def say_hi_to(name)
      puts "hi, #{name}"
    end
    
    say_hi_to("eddie")
    

    但我們通常會寫成:

    say_hi_to "eddie"
    

    把小括號省略了,這在 Ruby 是很常見的寫法

    二、Ruby 並沒有「屬性」(property/attribute)這樣的東西:

    class Girl
      def initialize(age)
        @age = age
      end 
    end
    
    little_girl = Girl.new(25)
    

    雖然這個 little_girl 看起來好像有 @age 變數,但不代表它是可以直接存取的屬性。硬是要用 little_girl.age 問她年紀,或是要用 little_girl.age = 18 設定她的年紀,她都會賞你一巴掌,給你錯誤訊息的。

    little_girl.age 你以為是讀取 little_girl 上的 age 屬性,但事實上是 little_girl.age() 方法,只是小括號被省略了。little_girl.age=18 你以為是設定 little_girl 的 age 屬性,但事實上是 little_girl.age=(18) 方法,只是小括號被省略了。

    說穿了 Ruby 一堆東西都是方法!

    你以為 1 + 2 是簡單的數學運算嗎? 其實它是 1.+(2),它是對數字物件 1 送了一個 + 的訊息,並且把數字物件 2 當做參數傳給它

    好啦,即然知道它們都是方法,那要怎麼定義它們呢?

    class Girl
      def initialize(age)
        @age = age
      end 
    
      # 因為它會取得 instance var,故又稱之 getter
      def age
        return @age      # 這邊的 return 通常也會省略
      end
    
      # 因為它會設定 instance var,故又稱之 setter
      def age=(new_age)
        @age = new_age
      end
    end
    

    請把等號當做一般的字母看待, 等號可以是方法名字的一部份

    這個方法就叫做 age=,要呼叫它就是用 age=(18),沒錯,就是連等號一起呼叫。

    所以,標準形態應該長這樣:

    little_girl.age=(18)
    

    但因為上述第一項,Ruby 可以省略小括號,所以可寫成:

    little_girl.age=18
    

    然後,Ruby 又有幫忙加了一些語法糖衣,讓你在中間加一些空白字元也是可以的:

    little_girl.age = 18
    

    最後就會讓你看起來像是在設定 age 屬性了。

    如果你懶得寫這樣的 getter/setter,可用 attr_readerattr_writerattr_accessor 來替你產生 getter/setter。

    不知道這樣回答有沒有讓樓主清楚一些 :)

    若有錯再請不吝指正