谁能帮助我理解"收益自我"和"收益率"之间的区别?
class YieldFirstLast
attr_accessor :first, :last
def initialize(first = nil, last = nil)
@first = first
@last = last
yield self if block_given?
end
def hello
puts "#{@first} #{@last} says hello!"
end
end
Run Code Online (Sandbox Code Playgroud) 当我找到这个例子时,我试图学习模式匹配.似乎case类模式匹配不适用于重载的case类构造函数.
case class MyClass(var first:String, var last:String){
def this(first: String) = this(first, "")
override def toString = "First: "+ first + " Last:" +last
}
val myClassTwo = new MyClass("a", "b")
myClassTwo match {
case MyClass(a,b) => println("two constructor matched")
case MyClass(a) => println("one constructor matched")
case _ => println("Not matched")
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误"模式MyClass的参数错误(第一个:字符串,最后:字符串)在"案例MyClass(a)"行.我期望模式匹配适用于重载的构造函数,但它不能正常工作有人可以解释一下这种行为吗?
另外,我得到一个构造函数参数的错误结果.
val myClassOne = new MyClass("a")
myClassOne match {
case MyClass(a,b) => println("two constructor matched")
case _ => println("Not matched")
}
Run Code Online (Sandbox Code Playgroud)
即使myClassOne只有一个agrument,这也会产生"两个匹配的构造函数" .请解释.