标签: initializer

有没有办法在C#中的对象初始化程序块中使用扩展方法

下面的简单演示捕获了我想要做的事情.在真正的程序中,我必须使用对象初始化块,因为它正在读取LINQ to SQL选择表达式中的列表,并且有一个值我要读取数据库并存储在对象上,但是对象没有我可以为该值设置的简单属性.相反,它有一个XML数据存储.

看起来我无法在对象初始化块中调用扩展方法,并且我无法使用扩展方法附加属性.

我对这种方法运气不好吗?唯一的替代方案似乎是说服基类的所有者为这种情况修改它.

我有一个现有的解决方案,我将BaseDataObject子类化,但是这个问题也没有出现在这个简单的例子中.对象将作为BaseDataObject进行持久化和恢复 - 转换和测试将变得复杂.

public class BaseDataObject
{

    // internal data store
    private Dictionary<string, object> attachedData = new Dictionary<string, object>();

    public void SetData(string key, object value)
    {
        attachedData[key] = value;
    }

    public object GetData(string key)
    {
        return attachedData[key];
    }

    public int SomeValue { get; set; }
    public int SomeOtherValue { get; set; }

}

public static class Extensions
{
    public static void SetBarValue(this BaseDataObject dataObject,
                                        int            barValue)
    {
        /// Cannot attach a property to BaseDataObject?
        dataObject.SetData("bar", …
Run Code Online (Sandbox Code Playgroud)

c# linq extension-methods initializer

7
推荐指数
2
解决办法
883
查看次数

如何在类初始化程序中设置联合?

给定一个类如下面的一个类和给定的union,如何将union初始化为正确的值?

这里尝试的是使用两种或更多种不同类型作为该类的核心数据类型之一.考虑到提前知道类型,将构造将要使用的类型的并集,而不是使用void*.问题是如何在实例化类时初始化正确的union成员.类型不是多态的,因此通常的继承模型似乎不合适.一些天真的尝试初始化正确的工会成员无处可去.

union Union {
   int n;
   char *sz;
};

class Class {
   public:
   Class( int n ): d( 1.0 ), u( n ) {}
   Class( char *sz ): d( 2.0 ), u( sz ) {}
   ....
   double d;
   Union u;
};
Run Code Online (Sandbox Code Playgroud)

在寻找解决方案之后,答案变得明显,并且可能是这个答案库的一个很好的解决方案,所以我将其包含在下面.

c++ initialization initializer unions

7
推荐指数
1
解决办法
5282
查看次数

为什么没有执行Railtie初始化程序?

在制作Passenger-Monit插件时,我认为使用初始化器是最合适的,即


module PassengerMonit
  class Railtie < Rails::Railtie
    initializer "my_plugin.some_init_task" do
      # my initialization tasks
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,由于某种原因,块中的代码从未执行过.我终于做了一个解决方案

config.before_initialize {}
Run Code Online (Sandbox Code Playgroud)

但我很好奇,为什么初始化程序没有被执行.有什么可以阻止它运行?

initializer ruby-on-rails-plugins ruby-on-rails-3 railtie

7
推荐指数
1
解决办法
975
查看次数

初始化shared_ptr成员变量,new vs make_shared?

初始化shared_ptr成员变量时:

// .h
class Customer
{
public:
  Customer();

private:
  std::shared_ptr<OtherClass> something_;
}

// .cpp
Customer():
  something_(new OtherClass())
{
}
Run Code Online (Sandbox Code Playgroud)

Customer():
  something_(std::make_shared<OtherClass>())
{
}
Run Code Online (Sandbox Code Playgroud)

是否允许使用make_shared版本?我似乎总是看到第一个版本,这是首选?

c++ initializer shared-ptr make-shared c++11

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

C:警告:数组初始化程序中的多余元素; 接近初始化'xxx'; 期望'char*',但是类型'int'

尝试用C语言编译程序时,我有一些警告:

13:20: warning: excess elements in array initializer [enabled by default]

13:20: warning: (near initialization for ‘litera’) [enabled by default]

22:18: warning: excess elements in array initializer [enabled by default]

22:18: warning: (near initialization for ‘liczba’) [enabled by default]

43:1: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]

45:2: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]

55:2: warning: format ‘%s’ expects argument of …
Run Code Online (Sandbox Code Playgroud)

c arrays initializer char

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

如何在Rails中使用Rspec测试配置/初始化程序脚本?

所以我在网上搜索解决方案,但似乎有关于测试在Rails中创建的初始化程序的稀缺信息.

目前,我在config/initializers/retrieve_users.rb文件中编写了一个非常大的API call-n-store.它发出API请求,解析JSON,然后将数据存储为用户.由于非常实质,我还没有找到最简洁的测试方法.由于我需要在运行任何函数之前检索用户,我不相信我可以在其他地方移动此脚本(尽管欢迎其他建议).我有几个问题:

  1. 我是否必须将它包装在函数/类中以测试我的代码?
  2. 我在哪里放我的spec文件?
  3. 我如何格式化RSpec风格?

谢谢!

rspec config ruby-on-rails initializer rspec-rails

6
推荐指数
2
解决办法
6150
查看次数

如何在Objective C中使用多个param调用Swift初始化方法

我在我的Swift文件中有一个Initializer方法,如下所示:

public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) {
        self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE
        self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR
        self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING
        super.init(frame: frame)
        isHidden = true
}
Run Code Online (Sandbox Code Playgroud)

我想从我的Objective-C文件中调用此方法,但在编译时抛出它的错误.

错误:

/ Users/Desktop/old data/ChatScreenViewController.m:396:92:'NVActivityIndi​​catorView'没有可见的@interface声明选择器'initWithFrame:type:color:padding:'

Obj-C调用代码:

NVActivityIndicatorView *objNVActivityIndicatorView = [[NVActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) type:NVActivityIndicatorTypeLineScalePulseOut color:[UIColor blueColor] padding:10]
Run Code Online (Sandbox Code Playgroud)

我试过的:

Objective-C在我的快速课程中添加

@objc public final class NVActivityIndicatorView: UIView
Run Code Online (Sandbox Code Playgroud)

仍然无法访问上述方法.

我的Swift文件:NVActivityIndi​​catorView.swift

任何想法出了什么问题?

提前致谢!

objective-c initializer swift

6
推荐指数
1
解决办法
2623
查看次数

初始化IBOutlet时如何初始化变量?

我碰巧UIViewControllers在我的新 iOS Swift 应用程序之一中编写了以下代码片段。

var starButtonsCount = starButtons.count
@IBOutlet var starButtons: [UIButton]!
Run Code Online (Sandbox Code Playgroud)

然后紧挨着starButtonsCount变量声明后面的错误出现了红色。

错误:无法在属性初始值设定项中使用实例成员“starButtons”;属性初始值设定项在 'self' 可用之前运行。

所以我发现通过声明starButtonCount变量lazy我们可以解决这个错误(在 iOS App 开发过程的长期运行中是暂时的)。

我很想知道还有什么其他方法可以解决这个问题?

有没有办法starButtonCountstarButtonsIBOutlets 初始化时触发初始化?

initializer iboutlet ios swift

6
推荐指数
1
解决办法
593
查看次数

为什么在 gcc 上接受 const 限定变量作为初始值设定项?

在最新版本的 gcc(或 clang)中编译此代码时 -std=c17 -pedantic-errors -Wall -Wextra

static const int y = 1;
static int x = y;
Run Code Online (Sandbox Code Playgroud)

然后我没有收到编译器诊断消息,即使我相当确定这不是有效的 C 而是约束违规。我们可以通过查看C17 6.7.9/4来证明它是不符合的:

约束
...
具有静态或线程存储持续时间的对象的初始值设定项中的所有表达式都应为常量表达式或字符串文字。

然后是关于常量表达式的定义,在这种情况下是整数常量表达式(6.6):

整数常量表达式应具有整数类型,并且只能具有整数常量、枚举常量、字符常量、结果为整数常量的 sizeof 表达式、_Alignof 表达式和作为强制转换的直接操作数的浮点常量的操作数。

最后是关于整数常量的定义(6.4.4.1/2):

整数常量以数字开头,但没有句点或指数部分。它可能有一个指定其基础的前缀和一个指定其类型的后缀。

因此,const int变量不是整数常量,也不是整数常量表达式。因此不是有效的初始化程序。这之前已经讨论过(例如这里),我认为已经确定这是不合格的。但是,我的问题是:

为什么 gcc 即使在严格模式下也选择不合规?

clang 显然一直不合规,但 gcc 从 7.3 版的合规变为 8.0 及更高版本的不合规。即使在没有-pedantic-errors.

似乎已经对这条消息做出了某种积极的、有意识的决定。为什么在 gcc 中完全删除它,为什么在严格模式下编译时不保留它-std=c17 -pedantic-errors

c gcc initializer static-initialization

6
推荐指数
1
解决办法
204
查看次数

SwiftUI View:两个不同的初始值设定项:无法将“Text”类型的值转换为闭包结果类型“Content”

代码:

import SwiftUI

public struct Snackbar<Content>: View where Content: View {
    private var content: Content

// Works OK
    public init(@ViewBuilder content: () -> Content) {
        self.content = content()
    }

    init(_ text: String) {
        self.init {
            Text(text) // cannot convert value of type 'Text' to closure result type 'Content'
                .font(.subheadline)
                .foregroundColor(.white)
                .multilineTextAlignment(.leading)
        }
    }

    public var body: some View {
        HStack {
            VStack(alignment: .leading, spacing: 4) {
                content
            }
            Spacer()
        }
        .frame(maxWidth: .infinity,
               minHeight: 26)
        .padding(.fullPadding)
        .background(Color.black)
        .clipShape(RoundedRectangle(cornerRadius: .defaultCornerRadius))
        .shadow(color: Color.black.opacity(0.125), …
Run Code Online (Sandbox Code Playgroud)

initializer ios swift swiftui viewbuilder

6
推荐指数
2
解决办法
5406
查看次数