【问题标题】:Can I directly append return function calls in Arrays?我可以直接在数组中附加返回函数调用吗?
【发布时间】:2018-07-06 01:43:01
【问题描述】:

我有一个函数调用其他返回对象的函数。 我尝试使用这种代码格式附加这些函数的返回值:

在我的model:

def get_cinfo(id)
  return Client.find(id)
end

def get_caddress(id)
  return Client.find(id).addresses
end

def get_cpolicies(id)
  return Client.find(id).policies
end

def get_ccontactinfo(id)
  return Client.find(id).contact_informations
end

def generate_client(id)
 client = Array.new
 client << get_cinfo(id) << get_caddress(id) << get_ccontactinfo(id)
end

在哪里: get_cinfo 、 get_caddress 和 get_ccontactinfo 是返回单个或两个实例的函数

产生的错误:[get_cinfo...] 变量未定义。

为什么会这样?附加到数组中是否不允许直接调用函数?

编辑:我尝试将self. 添加到每个函数中并且它有效。不过,我想知道,如果我不想将 self 添加到该函数以使其保持受保护状态-无论如何,除了在该特定函数中调用这些函数之外,我不打算(还)直接出于任何其他原因调用它答:

【问题讨论】:

  • 您将此代码放在哪里?模式、控制器还是其他地方?
  • .self 如果你作为类方法调用。
  • @iGian 嗨,是的,这个代码在模型中
  • 您似乎将这些定义为Client 模型中的实例方法。如果您想像Client.generate_client(42) 那样称呼它们,则必须将它们定义为类方法(有时称为静态方法)。你可以写def self.get_cinfo(id), ..., def self.generate_client(id)。这就是你想要的吗?
  • 此外,如果您在generate_client 的结果中混合了多种数据类型/模型,您应该考虑不使用数组而是使用哈希 - 在那里您可以正确命名属性而不必依赖根据您输入信息的顺序。

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

您必须首先声明client 及其值。在generate_client:

client = []
client << get_cinfo(id) << get_caddress(id) << get_ccontactinfo(id)
return client

【讨论】:

  • 忘记编辑了,但我的有client = Array.new
  • 好收获!但它没有解释错误:[get_cinfo...] variable is undefined.
【解决方案2】:

甚至没有理由创建数组然后单独附加到它,因为两者可以一起完成:

def generate_client(id)
 [get_cinfo(id), get_caddress(id), get_ccontactinfo(id)]
end

这将返回数组,无需额外的方法调用。无论如何,附加的方法调用是完全可以接受的。如果在您的示例中数组中的值为nil,则不是在generate_client 中创建数组的情况,而是更可能是函数调用返回的值。

【讨论】:

  • 随机否决票有什么特别的原因吗?有什么不对吗?
猜你喜欢
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多