草庐IT

C++类和对象

全部标签

ruby - 在 Ruby 中不是对象的 'Things' 示例

“一切皆对象”是我了解Ruby的第一件事,但在PeterCooper的BeginningRuby:FromNovicetoProfessional中提到“几乎Ruby中的一切都是对象”。你能给我一些事物在Ruby中不是对象的例子吗? 最佳答案 跳入我脑海的最明显的一个是block。通过在参数列表中使用&block参数形式或使用lambda,可以轻松地将block具体化为Proc对象proc、Proc.new或(在Ruby1.9中)“stabbylambda”语法。但就其本身而言,它们不是对象。另一个例子是运算符。

Ruby 对象模型 - 一个类的祖先

我正在学习“MetaprogrammingRuby”一书中的Ruby对象模型,并且我也了解类如何成为对象的概念。classAendA.ancestors#=>[A,Object,Kernel,BasicObject]A.class.ancestors#=>[Class,Module,Object,Kernel,BasicObject]我感到困惑的是,当我最初在irb中尝试A.ancestors时,我期望我在A.class.ancestors中得到的结果-我的思考过程是:因为A是一个类,而一个类是类Class的一个实例,它的祖先是Class。但是Class好像不是A的祖先。有人能在这里消

ruby - 如何检查 Ruby 对象的方法?

我想知道是否有一个Ruby方法调用只显示由调用它的Ruby对象定义的方法,而不是它的祖先类定义的所有方法,这就是methods似乎可以。 最佳答案 methods有一个可选的bool参数,它指定是否还列出对象的类及其父类(superclass)的方法,或者只列出对象的单例方法。所以你可以执行obj.methods(false)来只获取定义在obj上的单例方法。如果你想要对象类定义的方法,而不是它的父类(superclass)定义的方法,你可以通过调用对象类的instance_methods(false)来获得它,所以它是obj.cl

ruby-on-rails - 如何从字符串转换为对象属性名称?

我正在尝试将字符串值转换为属于对象的属性名称。例如,在下面的代码中,我需要将column_array中的所有字符串值转换为属性名称。名称"student_identification"、"email"等是我的Student表的实际列名。在实际场景中,column_array将由用户设置(通过勾选复选框)。new_array将替换为csv,因为我希望数据进入csv文件。此刻我真的在以下几行挣扎:new_array我希望将"#{column_array[i]}"转换为属性名称,以便我可以访问数据。defexp_tst@records=Student.find(:all,:condition

ruby - 每个月用日期对象迭代

所以我有两个ruby​​Date对象,我想每个月迭代它们。例如,如果我有Date.new(2008,12)和Date.new(2009,3),它会生成2008-12、2009-1、2009-2、2009-3(当然是Date对象)。我尝试使用范围,但它每天都会产生。我看到了Date的步骤方法,但是它只允许我传递天数(每个月都有不同的天数)。有人有什么想法吗? 最佳答案 这是非常Ruby的东西:每个月的第一天(Date.new(2008,12)..Date.new(2011,12)).select{|d|d.day==1}它将为您提供范

ruby - 使用 ActiveRecord 在查询对象中转义参数?

给定一个查询对象(不是AR模型)classComplexQueryQUERY=如何方便地转义所有参数?我成功地使用了三种技术,但没有一种是方便的。使用raw_connection(对我而言)返回PG::Conn的实例并调用exec_params。我对此并不满意,因为exec_params需要一组详细的参数来指定数据类型。在我的查询对象中包含ActiveRecord::Sanitization并使用其中一种方便的方法,例如replace_named_bind_variables。我对此不满意,因为replace_named_bind_variables是protected并且我必须使用s

ruby - 为什么我的 BigDecimal 对象初始化时出现意外舍入错误?

在Ruby2.2.0中,为什么:BigDecimal.new(34.13985572755337,9)等于34.0但是BigDecimal.new(34.13985572755338,9)等于34.1398557?请注意,我在64位机器上运行它。 最佳答案 用字符串而不是float初始化一般来说,您无法通过float获得可靠的行为。您错误地使用Float值而不是String值初始化BigDecimals,这在一开始就引入了一些不精确性。例如,在我的64位系统上:float1=34.13985572755337float2=34.13

类和对象的 Ruby 单例方法

我正在学习Ruby单例,我找到了一些定义和获取类和对象单例方法列表的方法。类单例方法定义类单例方法的方法:classMyClassdefMyClass.first_sing_method'first'enddefself.second_sing_method'second'endclass获取类单例方法列表的方法:#getsingletonmethodslistforclassandit'sancestorsMyClass.singleton_methods#getsingletonmethodslistforcurrentclassonlyMyClass.methods(false)

ruby - 有什么方法可以确定哪个对象调用了方法?

我希望Ruby的消息传递基础设施意味着可能有一些巧妙的技巧。我如何确定调用对象——哪个对象调用了我当前所在的方法? 最佳答案 你可以通过轻松查看调用感兴趣函数的代码行caller.first它会告诉你调用相关函数的文件名和行号。然后您可以反算它是哪个对象。但是,听起来您更像是在寻找某个调用特定函数的对象,也许是在实例方法中。我不知道有什么方法可以解决这个问题-但无论如何我都不会使用它,因为它似乎严重违反了封装。 关于ruby-有什么方法可以确定哪个对象调用了方法?,我们在StackOve

ruby - 如何从 Proc 对象中提取代码?

给定一个Proc对象,是否可以查看其中的代码?例如:p=Proc.new{test=0}我需要的是通过某种方式从已创建的Proc对象中获取字符串“test=0”。 最佳答案 您可以使用ruby2ruby图书馆:>>#testedwith1.8.7>>require"parse_tree"=>true>>require"ruby2ruby"=>true>>require"parse_tree_extensions"=>true>>p=Proc.new{test=0}>>p.to_ruby=>"proc{test=0}"您还可以将此过程