0

私はこのコードを見て、意味を理解しようとしていましたdef status=(status)。私は前にそれを見たことがありません。

class Tweet
attr_accessor :status

def initialize(options={})
self.status = options[:status]
end

def public?
self.status && self.status[0] != "@"
end

def status=(status)
@status = status ? status[0...140] : status
end
end
4

3 に答える 3

4

それはセッターです - あなたが言うときに呼び出されるメソッドですthing.status = whatever

そのようなメソッドがなければthing.status = whatever、その構文はセッターを呼び出すための構文糖衣にすぎないため、言うことは違法です。

于 2013-05-07T00:45:21.217 に答える
4

始めたばかりの時は理解できなかったので、素人の言葉で答えてみます。

Tweetクラスに属性を持たせたいとしましょうstatus。その属性を変更したいのですが、それはクラス内に隠されているためできません。クラス内の何かとやり取りできる唯一の方法は、そのためのメソッドを作成することです。

def status=(status)
  @status = status # using @ makes @status a class instance variable, so you can interact with this attribute in other methods inside this class
end

すごい!今、私はこれを行うことができます:

tweet = Tweet.new
tweet.status = "200" # great this works
# now lets get the status back:
tweet.status # blows up!

statusそれを行うメソッドを定義していないため、変数にアクセスできません。

def status
  @status # returns whatever @status is, will return nil if not set
end

tweet.statusもうまくいきます。

これには省略形があります。

attr_setter :status #like the first method
attr_reader :status # like the second one
attr_accessor :status # does both of the above
于 2013-05-07T01:41:53.300 に答える