我试图用OpenXML在Excel中创建命名范围.我能够在DefinedNames集合中添加DefinedName,但似乎没有做任何事情.我注意到在ExtendedFileProperties中有一个位置,其中保存了范围的名称,一个名为"TitlesOfParts"的结构.我尝试在那里添加一个条目,但这会导致excel抛出错误,并且不会创建命名范围.这是我正在使用的代码:
public void AddNamedRange(string pNamedRangeRef, string pNamedRangeName)
{
DefinedName _definedName = new DefinedName() { Name = pNamedRangeName, Text = pNamedRangeRef };
_workbook.Descendants<DocumentFormat.OpenXml.Spreadsheet.DefinedNames>().First().Append(_definedName);
DocumentFormat.OpenXml.VariantTypes.VTLPSTR _t = new DocumentFormat.OpenXml.VariantTypes.VTLPSTR() { Text = pNamedRangeName };
_spreadsheet.ExtendedFilePropertiesPart.Properties.TitlesOfParts.VTVector.Append(_t);
_spreadsheet.ExtendedFilePropertiesPart.Properties.TitlesOfParts.VTVector.Size++;
}
Run Code Online (Sandbox Code Playgroud) 我希望以这种方式注入配置参数:
public class MyManagedBean {
@Inject
public MyManagedBean(@Named("user") String user){
....
}
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试用这种方式实现一个生成器方法:
@ApplicationScoped
public class MyConfiguration {
private Properties loadProperties() {
Properties properties = new Properties();
try {
properties.load(getClass().getResourceAsStream(
"user.properties"));
} catch (IOException e) {
throw new RuntimeException();
}
return properties;
}
@Produces
@Named("user")
String getUser() {
return loadProperties().getProperty("user");
}
}
Run Code Online (Sandbox Code Playgroud)
我有这样定义的其他bean:
public class OtherManagedBean {
@Inject
public OtherManagedBean(MyManagedBean myManagedBean){
....
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试部署它时,我遇到了这个异常:
INFO: WEB0671: Loading application [example-ear#example-war.war] at [example]
SEVERE: Exception while loading the app
SEVERE: …Run Code Online (Sandbox Code Playgroud) 我想在Scala中做一些我会用Java做的事情:
public void recv(String from) {
recv(from, null);
}
public void recv(String from, Integer key) {
/* if key defined do some preliminary work */
/* do real work */
}
// case 1
recv("/x/y/z");
// case 2
recv("/x/y/z", 1);
Run Code Online (Sandbox Code Playgroud)
在Scala我能做到:
def recv(from: String,
key: Int = null.asInstanceOf[Int]) {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
但它看起来很难看.或者我可以这样做:
def recv(from: String,
key: Option[Int] = None) {
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
但现在用钥匙看起来很难看:
// case 2
recv("/x/y/z", Some(1));
Run Code Online (Sandbox Code Playgroud)
什么是正确的Scala方式?谢谢.
一位新同事刚刚建议在Hibernate中使用带注释的命名HQL查询(即@NamedQuery),而不是在我们的XxxxRepository类中嵌入HQL.
我想知道的是,除了集中查询之外,使用注释是否提供了任何优势?
特别是,是否有一些性能增益,例如,因为查询仅在加载类时解析一次,而不是每次执行Repository方法时?
对于某些类,理想情况下,我想创建特殊的命名实例,类似于"null".据我所知,这是不可能的,所以相反,我使用静态构造函数创建类的静态实例,类似于:
public class Person
{
public static Person Waldo; // a special well-known instance of Person
public string name;
static Person() // static constructor
{
Waldo = new Person("Waldo");
}
public Person(string name)
{
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,Person.Waldo是Person类的一个特殊实例,我创建它是因为在我的程序中,有很多其他类可能想要引用这个特殊的着名实例.
实现这种方式的缺点是我不知道如何使Person.Waldo的所有属性都是不可变的,而"普通"Person实例的所有属性都应该是可变的.每当我不小心有一个Person对象指向Waldo时,我不小心不检查它是否指的是Waldo,那么我不小心破坏了Waldo的属性.
是否有更好的方法,甚至是一些其他替代方法来定义类的特殊知名实例?
我现在知道的唯一解决方案是实现get和set访问器,并检查每个集合上的"if(this == Waldo)throw new ...".虽然这有效,但我认为C#可以比我实现它做得更好.如果只有我能找到一些C#方式来使得Waldo的所有属性只读(除了在静态构造函数中).
我正在购买一个开源框架,用于编写自然语言语法规则,以便在注释上进行模式匹配.您可以将其视为正则表达式,但匹配令牌而非字符级别.这样的框架应该使匹配标准能够引用附加到输入令牌或跨度的其他属性,以及在操作中修改这些属性.
我知道有三个选项符合此描述:
目前还有其他类似的选择吗?
相关工具
*使用GExp'规则'实际上是在代码中实现的,但由于我选择包含它的选项很少.
背景:在VBA中,可以在没有命名参数或使用命名参数的情况下调用" InStrRev "函数.
'Call without named parameters
Call InStrRev("AB", "B") 'No compiler error
i = InStrRev("AB", "B") 'No compiler error
'Call with named parameters
Call InStrRev(StringCheck:="AB", StringMatch:="B") 'No compiler error
i = InStrRev(StringCheck:="AB", StringMatch:="B") 'No compiler error
Run Code Online (Sandbox Code Playgroud)
关注:在VBA中,如果' InStr '函数,编译器返回"Expected:list separator"错误:
其返回值分配给变量
'Call without named parameters
Call InStr("AB", "B") 'No compiler error
i = InStr("AB", "B") 'No compiler error
'Call with named parameters
Call InStr(String1:="AB", String2:="B") 'No compiler error
i = InStr(String1:="AB", String2:="B") 'Compiler error : "Expected: …Run Code Online (Sandbox Code Playgroud)@FunctionalInterface
interface Fn2<A, B, R> : BiFunction<A, B, R>, (A, B) -> R {
@JvmDefault
override operator fun invoke(p1: A, p2: B): R {
...
Run Code Online (Sandbox Code Playgroud)
当我实现此接口时:
object: Fn2<Int,Int,Int> {
override fun invokeEx(accum: Int, i: Int): Int =
accum + i
}
Run Code Online (Sandbox Code Playgroud)
我收到警告:
警告:(598,76)Kotlin:超类型'Fn2'中的对应参数命名为'a'。使用命名参数调用此函数时,可能会导致问题。
我可以在函数定义中使用某种注释,关键字或秘密名称(如it或_)invoke()来摆脱这些警告。我承认我正在对Java / Kotlin互操作进行某种非标准的操作,当我完成重构时,这种操作可能会消失,但是我仍然很好奇。
我知道有一个@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")(谢谢evilbloodydemon),但我正在寻找一种方法来在我要覆盖的函数签名(而不是在实现中)抑制它。
我有一个看起来像这样的列表.
my_list <- list(Y = c("p", "q"), K = c("s", "t", "u"))
Run Code Online (Sandbox Code Playgroud)
我想用它们所在列表的名称命名每个列表元素(字符向量).同一向量的所有元素必须具有相同的名称
我能够编写适用于单个列表元素的此函数
name_vector <- function(x){
names(x[[1]]) <- rep(names(x[1]), length(x[[1]]))
return(x)
}
> name_vector(my_list[1])
$Y
Y Y
"p" "q"
Run Code Online (Sandbox Code Playgroud)
但无法找到一种矢量化的方法.如果我使用apply函数运行它,它只会返回列表不变
> lapply(my_list, name_vector)
$K
[1] "p" "q"
$J
[1] "x" "y"
Run Code Online (Sandbox Code Playgroud)
我想要的my_list输出是一个命名向量
Y Y K K K
"p" "q" "s" "t" "u"
Run Code Online (Sandbox Code Playgroud) 我想在 Go 中调用一个函数,并将参数名称附加到参数值
func sum(a int, b int) int {
return a + b
}
func main() {
result := sum(a=4, b=5) // result == 9
}
Run Code Online (Sandbox Code Playgroud)
是否可以?