我正在尝试创建一个模拟商店结帐的程序。但是,我的 async filteredServices ({ commit, dispatch }, form) {
const url = 'test/service/' + '?city_id=' + form.cityId + '&sub_category=' + form.subCat + '&car__car_model=' + form.car + '&limit=' + form.limit + '&offset=' + form.offset
const response = await dispatch('api/test/get', { url }, { root: true })
if (response.status === 200) {
commit('setCompanyService', response.data.results)
console.log('setCompanyService', response.data.results)
}
},
方法返回类变量applyFilter () {
this.filteredServices({
cityId: this.selectedCityId,
car: '',
subCat: 3360,
limit: '',
offset: ''
})
}
,而不仅仅是返回其找到的单数。这样,一旦添加了所有项目,便可以显示这些项目的总数。
AddItem
答案 0 :(得分:2)
最好使用find方法:
def AddItem(item)
@item.find{ |x| x[:name] == item }
end
更新
在红宝石中,snake_case
是首选。我已经用ruby方法编辑了代码。
class Action
def initialize(customer_money)
@money = customer_money
@items = [{ name: :milk, price: 2.99 }, { name: :eggs, price: 1.50 }, { name: :bread, price: 2.00 }]
end
def check_price(item)
@items.find{ |x| x[:name] == :bread }[:price]
end
def add_item(item)
@items.find{ |x| x[:name] == item }
end
def check_total(basket)
puts basket.sum{ |x| x[:price] }
end
end
答案 1 :(得分:1)
Ruby始终返回在方法中求值的表达式的结果。如果是class FileIdType extends Type
{
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return new FileId($value);
}
}
,则为AddItem
。 each
返回正在枚举的整个集合。您需要添加一个found元素作为方法的最后一行:
Enumerable#each
顺便说一句。在ruby中,方法用 def AddItem(item)
i = 0
found = nil
@item.each do |x|
if x[:name] == item
found = x
end
end
found # <<<<<<<<< returning found
end
而不是snake_case
命名。此外,CamelCase
是实例(不是类)变量。
您可以对@item
做同样的事情:
find
as def AddItem(item)
@item.find do |x|
x[:name] == item
end
end
返回该数组返回真实值的数组元素
答案 2 :(得分:0)
在Ruby中,将自动返回方法中定义的最后一个变量。由于您最后定义的是@item
,因此您将获得成功。问题是您正在遍历@item
,但没有对结果做任何事情,因此@item
保持不变。
假设@item
实际上应该是复数@items
?,我想您实际上想做的是使用select而不是每个。
def AddItem(item)
@items.select {|x| x[:name] === item}
end
这将返回从x[:name] === item
然后,方法AddItem
的名称并不能真正代表该方法的实际作用,但这又是另一回事了:)
答案 3 :(得分:0)
如果您不是明确地 return
来自某个方法的内容(或next
来自某个块的内容),则最后计算的表达式将变为方法的返回值(块,lambda,模块定义主体,类定义主体)。
由于您不要从return
中显式AddItem
,所以最后一个被求值的表达式将是返回值。最后计算的表达式是:
@item.each do |x|
if x[:name] == item
x
end
end
换句话说,AddItem
的返回值将是@item.each
的返回值。根据{{3}},返回值就是调用Array
的{{1}}。 (请注意,这实际上并非特定于each
,它是Array#each
的一般合同,因此对于{em的 all 所有实现{1}}。)
这很有道理:each
的目的是对集合的每个元素执行副作用。它实际上并没有有用的返回值。因此,两个明智的返回值分别为each
和each
,而库设计人员选择了nil
。 (大概是为了允许方法链接,我不知道。)
下一个问题是您的块实际上不执行任何操作。请记住,self
的目的是对每个元素执行一个副作用,但是您的块没有任何副作用!如果您想做任何有用的事情,则需要一个副作用(例如修改外部变量绑定):
self
或者,您可以直接each
找到的项目:
def AddItem(item)
return_value = nil
@item.each do |el|
return_value = el if el[:name] == item
end
return_value
end
但是,实际上,您要做的就是找到第一个匹配项:
return
请注意,您的代码有很多令人困惑的地方:
def AddItem(item)
@item.each do |el|
return el if el[:name] == item
end
end
,但是这两种方法做的事情完全不同。def AddItem(item)
@item.find {|el| el[:name] == item }
end
与CheckSomething
的功能完全相同,但是其名称完全不同。而且,它以完全不同的方式处理事情。 (这就是为什么它不起作用的原因。)AddItem
实际上并没有添加任何内容。CheckPrice
在AddItem
中做什么?i = 0
,这是一个非常通用的名称,并没有说明它在做什么。AddItem
时,将其分配给名为Action
的变量。但是,似乎也没有太多“定制”的事情。最后一句话:标准的Ruby Community Coding Style将Action
用于方法,局部变量,实例变量,类变量和全局变量。 customer
用于指向类或模块的常量,snake_case
用于指向其他常量。我们不使用PascalCase
。