我正在尝试处理一个简单的案例,我可以获得一个对象或字典。所以我要么得到一个像这样的对象:
obj.fields.nick
或者它将成为像
这样的字典obj['nick']
我想知道是否有更简单的方法来执行以下操作:
value = (eval("obj.fields." + field[1]) if obj?.fields ) ? eval("obj['#{field[1]}']")
我希望做类似的事情:
value = (obj?.fields?."#{field[1]}" ) ? eval("obj['#{field[1]}']")
但如果有效,我就不会写这篇文章......
我基本上在寻找一种方法来执行字符串作为if
的一部分答案 0 :(得分:5)
value = obj.fields?[field] ? obj[field]
# or
value = (obj.fields ? obj)[field]
这与
相同if obj.fields?
obj.fields[field]
else
obj[field]
绝对不需要eval
。
答案 1 :(得分:0)
字符串插值构造("Equals four: #{2+2}"
)是由coffeescript编译器处理的,因此不能在eval
内工作。但假设字符串中的内容命名没有改变,您可以轻松地重写它,以便eval("obj['#{field[1]}']")
变为eval("obj['"+field[1]+"']")
。假设我的问题当然正确。