如何通过动态接收类名

时间:2018-06-13 13:31:58

标签: ruby

我需要创建一个类,但条件是,我将在字符串中接收类名,如下所示

 ["IndividualContact", "Legal"].each do |var|
      ind = var.new
    end

现在我的期望是,我需要致电

IndividualContact.newLegal.new但是因为var是一个字符串变量,所以它在字符串上调用.new,如下所示

"IndividualContact".new 

而不是打电话

IndividualContact.new

我可以按照预期打电话吗?

1 个答案:

答案 0 :(得分:3)

使用enter image description here(假设这些类已在全局命名空间中定义):

 OracleParameter CaseParam = new OracleParameter("arg_CASE_NUMBER", OracleType.Number);
                CaseParam.Direction = ParameterDirection.Input;
                if (Case != null || Case!="")
                {
                    CaseParam.Value = Convert.ToInt32((Case.Equals(string.Empty)) ? (object)DBNull.Value : Case);
                }
                else
                {
                    CaseParam.Value = DBNull.Value;
                }
                //CaseParam.Value =Convert.ToInt32(Case);
                cmd.Parameters.Add(CaseParam);

                OracleParameter SRE_pricingParam = new OracleParameter("arg_SRE_PRICING_ELEMENT", OracleType.Number);
                SRE_pricingParam.Direction = ParameterDirection.Input;
                if (SRE_Pricing != null || SRE_Pricing != "")
                {
                    SRE_pricingParam.Value = Convert.ToInt32((SRE_Pricing.Equals(string.Empty)) ? (object)DBNull.Value : SRE_Pricing);
                }
                else
                {
                    SRE_pricingParam.Value = DBNull.Value;
                }
                //SRE_pricingParam.Value = Convert.ToInt32(SRE_Pricing);
                cmd.Parameters.Add(SRE_pricingParam);

上面的代码将返回一个包含两个实例的数组:一个%w|IndividualContact Legal|.map do |klazz| Kernel.const_get(klazz).new end 实例和一个IndividualContact实例。