Tag: splat

ruby:当总和为21时,添加数字并打印为true

这是rubeque.com上给出的一个简单问题:编写一个接受任意数量整数的方法,如果总和为21,则将它们添加为true。否则返回False。 它测试输入: assert_equal twenty_one?(3, 4, 5, 6, 3), true assert_equal twenty_one?(3, 11, 10), false 这是我到目前为止所拥有的: def twenty_one?(*nums) nums.inject(&:+) end if twenty_one? == 21 puts true else false end 但我收到错误消息: RuntimeError: The value ’21’ does not equal ‘true’. 我真的很困惑如何解决这个问题。 是否可以将if / else语句放在方法中? 如果这个问题非常基本,那就很抱歉。 我是编程新手。

溅上哈希

哈希上的splat将其转换为数组。 [*{foo: :bar}] # => [[:foo, :bar]] 是否有一些隐藏的机制(如隐式类转换)在这里,或者它是一个内置的原始function? 除了一个数组,在Ruby 1.9下使用splat运算符消失/改变的唯一内容是nil和hash吗?

如何使用splat和可选的哈希同时在ruby中定义方法?

我能够定义这样的方法: def test(id, *ary, hash_params) # Do stuff here end 但这使得hash_params参数成为hash_params参数。 这些也不起作用: def t(id, *ary, hash_params=nil) # SyntaxError: unexpected ‘=’, expecting ‘)’ def t(id, *ary, hash_params={}) # SyntaxError: unexpected ‘=’, expecting ‘)’ 有没有办法让它可选?

*(星号)符号在函数参数附近做什么以及如何在其他场景中使用它?

我正在使用Ruby on Rails 3,我想知道函数参数附近是否存在*运算符,并了解其在其他场景中的用法。 示例场景(此方法来自Ruby on Rails 3框架): def find(*args) return to_a.find { |*block_args| yield(*block_args) } if block_given? options = args.extract_options! if options.present? apply_finder_options(options).find(*args) else case args.first when :first, :last, :all send(args.first) else find_with_ids(*args) end end end

用YARD记录“splatted”参数的最佳方法是什么?

我有一个方法应该采用任何类的1+参数,类似于Array#push : def my_push(*objects) raise ArgumentError, ‘Needs 1+ arguments’ if objects.empty? objects.each do |obj| puts “An object was pushed: #{obj.inspect}” @my_array.push obj end end 使用YARD语法记录方法参数的最佳方法是什么? 编辑: 我意识到我原来的问题有点过于模糊,并没有明确说明我在寻找什么。 一个更好的问题是,在使用splatted参数时,在YARD中指定方法的arity(在这种情况下为1-∞)的最佳方法是什么? 我知道我可以在文本中指定它,但似乎应该有一个标签或类似的东西来指定arity。

双splat运算符破坏性地修改哈希 – 这是一个Ruby错误吗?

我注意到我发现Ruby 2.1.1中的** (双splat)运算符是一个非常令人惊讶的行为。 在**hash之前使用键值对时,哈希保持不变; 但是,当键值对仅在**hash之后使用时,哈希值将被永久修改。 h = { b: 2 } { a: 1, **h } # => { a: 1, b: 2 } h # => { b: 2 } { a: 1, **h, c: 3 } # => { a: 1, b: 2, c: 3 } h # => { b: 2 } […]

使用ruby splat运算符在哪里合法?

Splats很酷。 它们不只是用于爆炸arrays,尽管这很有趣。 它们还可以转换为数组并压平数组(请参阅http://github.com/mischa/splat/tree/master以获取他们所做的详尽列表。) 看起来无法对splat执行额外的操作,但在1.8.6 / 1.9中,以下代码抛出“意外的tSTAR”: foo = bar || *zap #=> unexpected tSTAR 虽然这有效: foo = *zap || bar #=> works, but of limited value splat在表达式中出现在哪里?