我正在尝试使用ruby on rails gem Rubychy来测试子应用程序的动态按钮。这是静态完成的方式:
keyboard = Rubychy::DataTypes::Keyboard.new(
:to => 'myname',
:hidden => false,
:responses => [
Rubychy::DataTypes::KeyboardResponse.new(
type: "text",
body: blah,
),
Rubychy::DataTypes::KeyboardResponse.new(
type: "text",
body: blah1,
)
]
)
响应是预定义的。我需要遍历一个数组并每次调用Rubychy::DataTypes::KeyboardResponse.new()
。虽然这非常不正确,但它显示了我需要循环的内容。
我尝试了不同的方法来做到这一点,我每次都被抓住了。
keyboard = Rubychy::DataTypes::Keyboard.new(
:to => 'myname',
:hidden => false,
:responses => [
parsed_response["values"].each do |val|
Rubychy::DataTypes::KeyboardResponse.new(
type: "text",
body: val.name,
)
end
]
)
有人可以帮忙吗?
答案 0 :(得分:1)
我认为您正在寻找Enumerable#map
:
映射{| obj | block}→array
[...]
为 enum 中的每个元素返回一个新数组,其中包含运行 block 的结果。
在你的情况下:
parsed_response['values'].map do |val|
Rubychy::DataTypes::KeyboardResponse.new(
type: "text",
body: val.name,
)
end
可以像这样添加到您的代码中:
keyboard = Rubychy::DataTypes::Keyboard.new(
:to => 'myname',
:hidden => false,
:responses => parsed_response["values"].map do |val|
Rubychy::DataTypes::KeyboardResponse.new(
type: "text",
body: val.name,
)
end
)
甚至:
to_response = ->(val) do
Rubychy::DataTypes::KeyboardResponse.new(
type: "text",
body: val.name,
)
end
keyboard = Rubychy::DataTypes::Keyboard.new(
:to => 'myname',
:hidden => false,
:responses => parsed_response["values"].map(&to_response)
)
使逻辑更清晰,代码更少噪音。