草庐IT

私有云建设

全部标签

ruby - Ruby 中的私有(private)/ protected block ?

Ruby似乎没有像这样定义protected/私有(private)block的工具:protecteddodefmethodendend与相比,这会更好protecteddefmethodendpublic您可能会忘记在protected方法之后“公开”的地方。似乎可以使用元编程来实现这一点。有什么想法吗? 最佳答案 由于您想按功能分组,您可以声明所有方法,然后使用protected后跟要保护的方法的符号来声明哪些方法是protected和私有(private)的,对于私有(private)方法也是如此。下面的类(class)说明

ruby-on-rails - RSpec:如何测试从 Controller 调用私有(private)辅助方法的辅助方法?

这是我所拥有的:从中调用Controller辅助方法(私有(private))的应用程序辅助方法。代码:应用程序助手:defordenar(coluna,titulo=nil)titulo||=coluna.titleizecss_class=(coluna==**coluna_ordenacao**)?"#{**direcao_ordenacao**}":"ordenavel"direcao=(coluna==**coluna_ordenacao**and**direcao_ordenacao**=="asc")?:desc::asclink_totitulo,{:sort=>col

ruby - 如何找到私有(private)单例方法

我已经定义了一个模块Vehicle这样的moduleVehicleclass调用Vehicle.singleton_methods返回[:build]。如何检查Vehicle定义的所有私有(private)单例方法? 最佳答案 在Ruby1.9+中,您可以简单地执行以下操作:Vehicle.singleton_class.private_instance_methods(false)#=>[:background]在Ruby1.8中,事情有点复杂。Vehicle.private_methods#=>[:background,:inc

ruby - 为什么 ruby​​ 允许子类访问父类的私有(private)方法?

classMaindefsay_helloputs"Hello"endprivatedefsay_hiputs"hi"endendclassSubMain输出:hiTesting 最佳答案 区别在于在ruby中你可以隐式调用子类中的私有(private)方法而不是显式调用。Protected可以双向调用。至于为什么?我猜你得问问Matz。例子:classTestMainprotecteddefsay_holaputs"hola"enddefsay_ni_haoputs"nihao"endprivatedefsay_hiputs"hi

ruby - 子类中是否可以访问 Ruby 私有(private)方法?

我有如下代码:classAprivatedefp_methodputs"I'maprivatemethodfromA"endendclassBError:Privatemethodcannotbecalledb.some_method#=>I'maprivatemethodfromAb.some_method调用类A中定义的私有(private)方法。如何在继承它的类中访问私有(private)方法?这种行为在所有面向对象的编程语言中都一样吗?Ruby是如何进行封装的? 最佳答案 这是来自thissource的简要说明:Public

Ruby:使用 self 关键字从内部调用私有(private)方法

classMyClassdeftestputsmy_idputsself.my_idendprivatedefmy_id115endendm=MyClass.newm.test此脚本产生输出:115priv.rb:4:in`test':privatemethod`my_id'calledfor#(NoMethodError)frompriv.rb:15:in`'使用self关键字和不使用关键字从内部调用方法有什么区别?根据我的Delphi和C#经验:没有区别,self可以用来避免与局部变量的名称冲突,表示我想调用实例函数或引用实例变量. 最佳答案

ruby - 在 ruby​​ 上,为什么 include 是私有(private)的而 extend 是公共(public)的?

在ruby上,为什么include是private,而Object#extend是public? 最佳答案 Object#extend必须是公开的,否则您将无法使用它。毕竟,它的目的是将模块混合到对象中,因此您通常会像obj.extend(Foo)那样调用它,这对于私有(private)方法是不可能的。Module#include通常只在模块体内使用,如下所示:classBarincludeFooend即它通常在没有接收者的情况下被调用,所以它不必公开。当然,它也必须是私有(private)的。我猜它之所以是私有(private)的

Ruby class initialize(constructor) 是私有(private)方法还是公共(public)方法?

ruby中的初始化方法(构造函数)是私有(private)的还是公共(public)的? 最佳答案 让我们看看:classTestdefinitialize;endendpTest.new.private_methods.sort.include?(:initialize)这会打印出true,所以initialize是一个私有(private)方法。这是有道理的,只有当对象被创建时,它才会被new类方法调用。如果我们愿意,我们可以这样做:classTestdefinitialize@counter=0enddefreset!init

ruby - 如何访问私有(private)方法

我的理解是private意味着对实例私有(private)。不能使用显式接收者调用私有(private)方法,即使是self。要调用私有(private)方法,我必须经历如下过程:classSampledeffoobazendprivatedefbazendendSample.new.foo这将调用私有(private)baz方法。有没有办法直接调用带有显式接收者的私有(private)方法? 最佳答案 是的,这可以通过Kernel#send实现:receiver.send:method_name,parameters尽管有类似Ba

ruby-on-rails - 无法将自定义字段添加到 Ruby on Rails 中的 Devise 模型。私有(private)方法错误

使用Devisegem生成的用户模型。尝试添加“用户名”属性。按照官方文档,现在我的ApplicationController是这样的:classApplicationController当我尝试转到帐户更新页面时,出现以下错误:NoMethodErrorinDevise::RegistrationsController#editprivatemethod`permit'calledfor#Devise::ParameterSanitizer:0x007f13396cf180>这里有什么问题吗? 最佳答案 根据thisanswer,