我需要解释方法注入

时间:2016-11-03 09:45:16

标签: ruby-on-rails ruby

我想弄清楚注入方法是如何工作的

有人可以解释一下吗

def mysort
  if djeca.any?
      djeca.order(name: :asc).inject([]) { |sum, c| sum += c.mysort}.uniq
  else
      [self]
end

mysort是模型类Books

的方法

在控制器中我调用方法mysort:

@mybooks= Books.find_by(name: 'renesansa')
@mybookss= @mybooks.leaf_wms

3 个答案:

答案 0 :(得分:0)

您应该点击此链接https://samurails.com/tips/ruby-ruby-on-rails-inject/

例如:

0

此处,流程从3索引开始到1 & 2索引。第一次注入添加sum以获取两个值的总和并存储在sum变量(即sum = 3)中,然后它取10值并将其加3,以获得结果(即sum = 6)等等。最后,您将获得Calendar myCalendar = Calendar.getInstance(); DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.FRANCE); Log.d("Time",dateFormat.format(myCalendar.getTime()));

之类的结果

答案 1 :(得分:0)

sum = []
djeca.order(name: :asc).each{|c| sum = sum + c.mysort}
sum.uniq

相当于

djeca.order(name: :asc).map{|c| c.mysort}.flatten.uniq

添加数组实际上是concatening,因此您的代码只需将所有c.mysort附加到数组中。

如果我理解正确,你也可以写:

(1..10).inject(0){|mem,i| mem += i}
#=> 55

(1..10).inject(0){|mem,i| mem + i}
#=> 55

根据您的受众群体,您可能想要写一个或另一个。 请注意,您不需要在注入块中为sum赋值,它会自动完成。

let users = [{
  name: "abcd"
}, {
  name: "xyz"
}, {
  name: "temp"
}];

class Example extends React.Component {
    constructor(props) {
      super(props);
      this.state = {
        activeIndex: 0
      };
    }

  tick =() => {
    let activeIndex = this.state.activeIndex;
    if (activeIndex == this.props.users.length -1){
      activeIndex = 0;
      } else {
        activeIndex++;
        }
    this.setState({
      activeIndex
    });
  }

    render() {
        return ( 
      < ul className = "list-group" >
          < li className = "list-group-item" > 
                {this.props.users[this.state.activeIndex].name} 
                < button className = "btn btn-default" onClick={this.tick} >
                  show Next 
                < /button> 
              </li >
          < /ul>
      );
      }
    }

    ReactDOM.render( 
      < Example users = {users}/ > ,
          document.getElementById('test')
     );

答案 2 :(得分:0)

  

djeca.order(姓名:: asc)

检索活动记录数组

  

.inject([])

循环播放每条活动记录。 inject的初始输出是空数组[]。

  

{| sum,c | }

c - 每个活动记录

sum - 注入输出值。最初是[]。在每次迭代时,该值将附加到数组。 (总和+ = [某些值]