小编Sea*_*ren的帖子

如何从Ruby中的实例方法访问受保护的类方法?

我一定不知道人们如何在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'),但到目前为止,我似乎无法找到一种优雅的方式.

ruby methods class protected instance

6
推荐指数
1
解决办法
1062
查看次数

UIButton addTarget如何自行工作?

我试着找出为什么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)

self uibutton ios swift addtarget

5
推荐指数
1
解决办法
7647
查看次数

列表的交集

是否有更好,更优雅和简洁的方法来获得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#标准库的设计非常糟糕,因为这种问题一直存在.

有没有更好的,这意味着更优雅和简洁,这样做的方式?

c# ruby intersection list

4
推荐指数
1
解决办法
7743
查看次数

标签 统计

ruby ×2

addtarget ×1

c# ×1

class ×1

instance ×1

intersection ×1

ios ×1

list ×1

methods ×1

protected ×1

self ×1

swift ×1

uibutton ×1