我一定不知道人们如何在Ruby中做到这一点.
如果'#protected'被取消注释,我们得到:
'what':受保护的方法'zoop'调用Foo:Class(NoMethodError)
有没有更好的方法来处理受保护的类方法?
class Foo
class << self
#protected
def zoop
"zoop"
end
end
public
def what
"it is '#{self.class.zoop}'"
end
protected
end
a = Foo.new
p a.what # => "it is 'zoop'"
Run Code Online (Sandbox Code Playgroud)
我想zoop受保护或私人(没有叫'Foo.zoop'),但到目前为止,我似乎无法找到一种优雅的方式.
我试着找出为什么self指向GameViewController而不是Answer
GameViewController.swift
class GameViewController: UIViewController {
var gameplay = QuestionsController(colors: colors)
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(gameplay.answersController.answers[0].button)
}
func didPressAnswerButton(sender: UIButton!) {
sender.setTitle("Im from GameViewController class", forState: .Normal)
}
}
Run Code Online (Sandbox Code Playgroud)
QuestionsController.swift
class QuestionsController {
var question: Question
var answersController: AnswersController
}
Run Code Online (Sandbox Code Playgroud)
AnswersController.swift
class AnswersController {
var answers = [Answer]()
func prepareAnswers() {
let answer = Answer()
answers.append(answer)
}
}
Run Code Online (Sandbox Code Playgroud)
Answer.swift
class Answer{
let button: UIButton
func prepareButton() {
let answerButton = AnswerButton(type: .System)
answerButton.addTarget(self, action: "didPressAnswerButton:", forControlEvents: .TouchUpInside) …Run Code Online (Sandbox Code Playgroud) 是否有更好,更优雅和简洁的方法来获得C#中两个列表的交集?
在C#中,计算日期列表交集的方法是:
public List<DateTime> dates_common(Timeserie ts1, Timeserie ts2)
{
var dt1 = new HashSet<DateTime>(ts1.dates);
var dt2 = new HashSet<DateTime>(ts2.dates);
dt1.IntersectWith(dt2);
var dt = new DateTime[dt1.Count];
dt1.CopyTo(dt);
return new List<DateTime>(dt);
}
Run Code Online (Sandbox Code Playgroud)
在Ruby中,可以这样做:
def dates_common(ts1, ts2)
dt1 = ts1.dates.to_set
dt2 = ts2.dates.to_set
return dt1.intersection(dt2).to_a
end
Run Code Online (Sandbox Code Playgroud)
这种笨拙的根本原因是IEnumerable和具体容器和数组之间的不对称性.
我不断惊讶于C#标准库的设计非常糟糕,因为这种问题一直存在.
有没有更好的,这意味着更优雅和简洁,这样做的方式?