我正在寻找更清晰的方式来写这个
{
if(condition)
a: 25
elseif
a: 32
end
if(condition)
b: 25
elseif
b: 32
end
}
我在这样的哈希中有各种键,它们都基于相同的条件。
查询1:如果所有键的条件相同,是否有更好/更清晰的ruby方式?
查询2:如果所有键的条件不同,是否有更好/更清晰的ruby方式?
我尝试编写方法,接受条件,object1,object2作为参数,如果条件为true则返回object1,否则返回object2。它不起作用。
def conditional(condition,object1,object2)
if(condition)
object1
elsif
object2
end
端
答案 0 :(得分:3)
如果条件相同,则在if。
中构造整个哈希if condition
{ a: 1, b: 2 }
else
{ a: 3, b: 4 }
end
如果条件是特定的,我会尝试用小的专门方法提取逻辑。
{ a: value_for_a, b: value_for_b }
答案 1 :(得分:1)
我建议继续完成任务,而不是过分关注rubocop想要的东西。我可以同意额外冗长的行看起来不太好并且应该避免它们 - 但有时可能会发生字符串(对于URL的配置等)可能会有点冗长,所以只需停用此块的行长度检查,然后再激活它。
# rubocop:disable LineLength
{ a: "blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla" }
# rubocop:enable LineLength
答案 2 :(得分:0)
也许ternary operator会有帮助吗?
这是一个类似于:
的表达式Caches:
Current memory usage / total memory usage (bytes):
TextureCache 74625498 / 75497472
LayerCache 3538944 / 50331648 (numLayers = 3)
Layer size 1440x810; isTextureLayer()=1; texid=24 fbo=0; refs=1
Layer size 1440x810; isTextureLayer()=1; texid=42 fbo=0; refs=1
Layer size 1440x810; isTextureLayer()=1; texid=48 fbo=0; refs=1
Layer size 1344x192; isTextureLayer()=0; texid=40 fbo=0; refs=1
Layer size 1472x192; isTextureLayer()=0; texid=41 fbo=0; refs=1
Layer size 1344x256; isTextureLayer()=0; texid=23 fbo=0; refs=1
Layers total 17535744 (numLayers = 6)
RenderBufferCache 0 / 8388608
GradientCache 32768 / 1048576
PathCache 1260 / 33554432
TessellationCache 0 / 1048576
TextDropShadowCache 0 / 6291456
PatchCache 128 / 131072
FontRenderer 0 A8 1048576 / 1048576
FontRenderer 0 RGBA 0 / 0
FontRenderer 0 total 1048576 / 1048576
Other:
FboCache 0 / 0
Total memory usage:
93243974 bytes, 88.92 MB
答案 3 :(得分:0)
使用tap和ternary更具可读性
hsh = Hash.new
hsh.tap do |hsh_instance|
hsh_instance[:a] = get_value_a
hsh_instance[:b] = get_value_b
end
def get_value_a
condition_true? ? value_1_a : value_2_a
end
def get_value_b
condition_true? ? value_1_b : value_2_b
end
答案 4 :(得分:0)
尝试三元表达式
a =条件? 25:32