Упростите оператор CoffeeScript - PullRequest
0 голосов
/ 29 ноября 2011

Я пытаюсь разобраться с простым случаем, когда я могу получить объект или словарь. Так что я либо получу объект вроде:

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

Ответы [ 2 ]

5 голосов
/ 30 ноября 2011
value = obj.fields?[field] ? obj[field]
# or
value = (obj.fields ? obj)[field]

Это то же самое, что и

if obj.fields?
    obj.fields[field]
else
    obj[field]

Нет абсолютно никакой необходимости в eval.

0 голосов
/ 30 ноября 2011

Конструкция интерполяции строки ("Equals four: #{2+2}") - это то, что обрабатывается компилятором coffeescript и поэтому не будет работать внутри eval.Но если предположить, что наименование материала внутри строки не изменится, вы можете легко переписать его, чтобы eval("obj['#{field[1]}']") стало eval("obj['"+field[1]+"']").Если, конечно, я правильно понял ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...