细长的局部变量三元分配

Ter*_*ion 5 ruby ruby-on-rails slim-lang

我有一个苗条的部分,如此:

- name = (defined?(name) ? name : 'tags')
- id = (defined?(id) ? id : ('input-' + name))
- label = defined?(label) ? label : nil
- placeholder = defined?(placeholder) ? placeholder : nil
- className = defined?(className) ? className : nil
- prefetch = defined?(prefetch) ? prefetch : nil
- displayKey = defined?(displayKey) ? displayKey : nil
- valueKey = defined?(valueKey) ? valueKey : nil

.input-container.tags
  - if label
    label for="#{id}" = label
  input type="text" id="#{id}" name="#{name}" placeholder="#{placeholder}" data-prefetch="#{prefetch}" data-displayKey="#{displayKey}" data-valueKey="#{valueKey}"
Run Code Online (Sandbox Code Playgroud)

当我使用它(通过==渲染)并传递当地人时 - 一切都很好.

但是当我省略,例如,名称 - 它没有分配给默认的'标签'.同样适用于id.它们只是空的.如果我在开头注释掉分配 - 未定义的变量错误会引发预期.

作业有什么问题?

dim*_*ura 4

你不需要苗条。只是irb代码:

name = (defined?(name) ? name : 'tags')
p name #=> nil
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为您name在语句的左侧隐式定义了name = ...。因此,当 Ruby 解释器评估时,defined?(name)它会给出真实的结果。

我想你已经得到答案了:

unless defined?(name)
  name = 'tags'
end
Run Code Online (Sandbox Code Playgroud)

或更短:

name ||= 'tags'
Run Code Online (Sandbox Code Playgroud)