标签: splat

在构造函数中使用splat运算符是否有效?

在构造函数中,经常会发生将参数转换为实例变量的情况。一个简单的方法是:

class A
    def initialize a, b, c
        @a, @b, @c = a, b, c
    end
end
Run Code Online (Sandbox Code Playgroud)

但更简单的方法是:

class A
    def initialize *args
        @a, @b, @c = args
    end
end
Run Code Online (Sandbox Code Playgroud)

但是我担心代码的速度,因为看起来后者的代码正在创建一个额外的数组args,而前一个代码并未创建该数组。从速度或效率的角度来看,坚持前者而不使用后者是更好的选择,还是没有区别?

ruby constructor splat ruby-1.9.3

4
推荐指数
1
解决办法
676
查看次数

ReactiveUI依赖注入构造函数

我在ReactiveUI中使用内置的依赖项注入器/ splat注入器。

我有要传递其适用的数据存储库的构造函数。

在其他框架中,它仅对接口使用反射,并使用GetServices调用来满足那些构造函数要求。例如,目前我具有用于创建类的此辅助程序扩展方法:

    /// <summary>
    /// Helper class for having a object's constructor automatically assigned by a "GetService" request.
    /// </summary>
    /// <param name="resolver">The resolver.</param>
    /// <param name="type">The type to register.</param>
    public static void Register<TConcrete, TInterface>(this IMutableDependencyResolver resolver)
        where TConcrete : class
    {
        var concreteType = typeof(TConcrete);

        // Must be a single constructor
        var constructors = concreteType.GetConstructors().Single();

        IList<object> values = new List<object>();

        foreach (var parameter in constructors.GetParameters())
        {
            if (parameter.ParameterType.IsInterface == false)
            {
                throw new InvalidOperationException($"The type {concreteType.Name} has …
Run Code Online (Sandbox Code Playgroud)

c# splat reactiveui

4
推荐指数
1
解决办法
1361
查看次数

在Ruby中使用带有splats的下划线

我已经 通过Ruby样式指南跟踪了Ruby的"为什么(Poignant)指南",以及Ruby教程如何思考.但这是我第一次看到尾随下划线.这些是什么东西?它们是否有用,如果是,我们何时使用它们以及如何将它们与splat运算符一起使用?

(Ruby样式指南链接锚定到实际示例)

ruby ruby-on-rails splat

4
推荐指数
1
解决办法
575
查看次数

Ruby rubocop:如何冻结用splat生成的数组常量

我正在分配一个像这样的数组常量:

NUMS = *(2..9)
Run Code Online (Sandbox Code Playgroud)

Rubocop说

C:冻结分配给常量的可变对象.               NUMS
=*(
2..9 )^^^^^


所以我试试

NUMS = *(2..9).freeze
Run Code Online (Sandbox Code Playgroud)

Rubocop说

C:冻结分配给常量的可变对象.
NUMS =*(2..9).freeze
               ^^^^^^^^^^^^


试着

NUMS = (*(2..9)).freeze
Run Code Online (Sandbox Code Playgroud)

Rubocop说

E:意外的令牌tRPAREN(使用Ruby 2.0解析器;在AllCops下使用TargetRubyVersion参数配置)NUMS
=(*(2..9)).冻结
                         ^


试着

NUMS = [1, 2, 3, 4, 5, 6, 7, 8, 9].freeze
Run Code Online (Sandbox Code Playgroud)

Rubocop说

== happy_robot_dance(没有错误)

我说

键入1,2,3,... 9,我的手会受伤

有没有办法使用splat分配和冻结常量?

----------

解决方案

NUMS = (2..9).to_a.freeze

NUMS = Array(2..9).freeze
Run Code Online (Sandbox Code Playgroud)

ruby constants freeze splat rubocop

4
推荐指数
2
解决办法
1660
查看次数

如何使用splat-operator(*)打印列表而不带空格

我试图了解python中的splat-operators。我有一个代码:

word = ['s', 't', 'a', 'c', 'k', 'o', 'v', 'e', 'r', 'f', 'l', 'o', 'w']
print(*word)
Run Code Online (Sandbox Code Playgroud)

输出:

s t a c k o v e r f l o w
Run Code Online (Sandbox Code Playgroud)

我无法分配*word给某个变量来检查其类型或在调试中进行其他操作。因此,我比较讨厌哪种方式print()获取序列,*word以及是否有可能在不带空格的情况下打印此单词。理想的输出:

stackoverflow
Run Code Online (Sandbox Code Playgroud)

python splat

4
推荐指数
1
解决办法
45
查看次数

将splat参数从一个方法传递到另一个方法

我想使用splat参数创建名为'add'和'subtract'的方法,如下所示:

def add(*numbers)
  numbers.inject(0) { |sum, n| sum + n }
end

def subtract(*numbers)
  numbers[0] - add(numbers[1..-1])
end
Run Code Online (Sandbox Code Playgroud)

但它没有用.我该怎么做才能将splat参数从一个传递给另一个?(特别是对于某些特定范围...)

谢谢!

ruby arrays parameters splat

3
推荐指数
1
解决办法
1156
查看次数

查找数组的第二个元素

我不明白这怎么行不通。该程序应该采用 Array 类中的第二个实例方法并返回数组中的第二个对象

class Array
  def second(*arr)
  arr.length <= 1 ? nil : arr[1]
  end
end

#Test cases
Test.assert_equals(Array([1, 2, 3]), 2,) #Getting nil
Test.assert_equals(Array([]), nil) #passes
Test.assert_equals(Array([1]), nil) #passes
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如果我删除类数组并在第二个测试它工作正常吗?

ruby arrays class splat instance-methods

3
推荐指数
1
解决办法
1万
查看次数

什么是Ruby中使用的独立splat运算符(*)?

我刚刚遇到了这个示例,其中splat运算符在方法定义中单独使用:

def print_pair(a,b,*)
  puts "#{a} and #{b}"
end

print_pair(1,2,3,:cake,7)
#=> 1 and 2
Run Code Online (Sandbox Code Playgroud)

很明显你会在这样的上下文中使用它的原因和原因如下:

def arguments_and_opts(*args, opts)
  puts "arguments: #{args} options: #{opts}"
end

arguments_and_opts(1,2,3, a: 5)
#=> arguments: [1, 2, 3] options: {:a=>5}
Run Code Online (Sandbox Code Playgroud)

但是为什么以及如何在第一个例子中使用它呢?既然在Ruby规范中定义了它必须有一个用例吗?

ruby splat

3
推荐指数
1
解决办法
1198
查看次数

为什么不直接使用powershell中的命令工作?

为什么以下工作:

Get-WmiObject -class Win32_OperatingSystem
Run Code Online (Sandbox Code Playgroud)

这也有效:

$params = @{class='Win32_OperatingSystem'}
Get-WmiObject @params
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

Get-WmiObject @{class='Win32_OperatingSystem'}
Run Code Online (Sandbox Code Playgroud)

错误:

Get-WmiObject : Invalid query "select * from System.Collections.Hashtable"
At line:1 char:1
+ Get-WmiObject @{class='Win32_OperatingSystem'}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [Get-WmiObject], ManagementException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
Run Code Online (Sandbox Code Playgroud)

powershell splat

3
推荐指数
1
解决办法
316
查看次数

怎么把[45,32,56]或“ 45,32,56”转换成42,32,56?

我有一个哈希,我想从中获取特定的密钥

a={1=>32, 23=>23, 24=>232, 56=>123} 
keys=[23,56]
Run Code Online (Sandbox Code Playgroud)

为了从a {}获取此键的值,我正在使用function

a.values_at 23,56 # => [23, 232]`
Run Code Online (Sandbox Code Playgroud)

问题是我如何转换[23,56....]23,56

ruby arrays splat

3
推荐指数
1
解决办法
60
查看次数