私はRailsのドキュメントを勉強しています。レールに似た連鎖したルビーメソッドの定義を定義する
Project#portfolio.nil?
これは私には奇妙に思えた:associations documentationの中で、彼らはこのように、それらの上にチェーンとメソッドの定義を指定します。それには、チェーンメソッドがあるインスタンスメソッド定義があるように見えます。たとえば、次のようにチェーンが実際のインスタンスメソッドの定義内で指定された場所:
class Project < ActiveRecord::Base
def portfolio.nil?
...
end
end
私は前にこのように定義されているインスタンスメソッドを見たことがありません:Project#portfolio.nil?
は次のようになりインスタンスメソッドを定義することが表示されます。私は真っ直ぐなルビーでそれを複製しようとしましたが、私はそれを動作させることができませんでした。
class Dog
def speak
puts "woof woof"
end
def speak.fetch
puts "go get the ball!"
end
end
ただし、これは機能しません。その後、私はDog.new.speak.fetch
をしようとするだろう:それは仕事をした場合NameError
NameError: undefined local variable or method `speak' for Dog:Class
があります。私はそれが何を返すか分からない。多分それは返します:
=> woof woof!
=> go get the ball!
質問:それはどういうわけか、このような彼らの鎖でインスタンスメソッドの定義を定義することは可能であってもですか?そうでない場合:レールはどうしていますか? Project#portfolio.nil?
を例として使用すると、Railsはどのようにして#portfolio.nil?
を定義しますか?
これは正解です。 –