groovy 中的构造函数允许使用命名参数,方法参数允许使用默认值,但我似乎无法获得具有默认参数值的方法与命名参数一起使用。
理想情况下,我想要这样的东西:
def myMethod(def greeting = "Hello", def person = "World", def inflection = "!") {
"${greeting} ${person}${inflection}"
}
assert myMethod() == "Hello World!"
assert myMethod(greeting: "Hi") == "Hi World!"
assert myMethod(inflection: "?", person: "bob") == "Hello Bob?"
assert myMethod("Sup") == "Sup World!"
assert myMethod("Word", "Dawg") == "Word Dawg!"
Run Code Online (Sandbox Code Playgroud)
这是我能得到的最接近的结果,但它非常丑陋,感觉不是很“常规”,并且在所有情况下都不能完全工作:
def myMethod(Map vars = [:]){
vars.greeting = vars.greeting ?: "Hello"
vars.person = vars.person ?: "World"
vars.inflection = vars.inflection ?: "!"
"${vars.greeting} ${vars.person}${vars.inflection}"
}
Run Code Online (Sandbox Code Playgroud) 假设我有以下 Dart 类,其构造函数中有一个命名参数:
class TestClass {
final int someValue;
TestClass({this.someValue});
}
void someMethod() {
TestClass testClass = new TestClass(someValue: 10);
print(testClass.someValue);
}
Run Code Online (Sandbox Code Playgroud)
如何为该字段添加吸气剂?我正在尝试以下内容:
class TestClass {
final int _someValue;
TestClass({this.someValue});
int get someValue => _someValue+2;
}
Run Code Online (Sandbox Code Playgroud) 我有一个程序员的SQL:
$sql = "
INSERT INTO
`{$database}`.`table`
(
`my_id`,
`xType`,
`subType`,
`recordID`,
`textarea`
)
VALUES
(
{$my_id},
?xType,
?subType,
{$recordID},
?areaText
) ";
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么他?在价值观之前使用?我怎样才能看到有什么价值?我做了echo,它显示?xType为?xType.没有价值.什么 在SQL中代表什么?
我们可以HashTable使用以下语法初始化对象.
var listTinhThanh = new System.Collections.Hashtable()
{
{ "key", someObject }
};
Run Code Online (Sandbox Code Playgroud)
我想以这样一种方式使用代码:
var listTinhThanh = new System.Collections.Hashtable()
{
{ Key:"key", Value:someObject }
};
Run Code Online (Sandbox Code Playgroud)
但这不起作用.你有办公室吗?
c# initialization hashtable named-parameters visual-studio-2010
我使用辅助方法在视图中创建部分:
@helper CreateFacetSection(WebViewPage page, string sectionName,
List<FacetValue> model)
{
var showMore = int.Parse(WebConfigurationManager.AppSettings["ShowMore"]);
<section id="@sectionName">
<h4>@sectionName</h4>
<ul>
@for (int i = 0; i < model.Count(); i++)
{
if (i >= showMore)
{
@:<li class="hide">
}
else
{
@:<li>
}
FacetValue fv = model.ElementAt(i);
@page.Html.ActionLinkWithQueryString(fv.Range, "Search",
new { sectionName = fv.Range }, null);
@:(@fv.Count)
@:</li >
}
</ul>
@if(model.Count > showMore)
{
<a href="#" class="show-more" data-section="@sectionName">
@Localization.ShowMore ▼</a>
}
</section>
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说我@Html.ActionLink在上面的帮助器中使用了这个自定义助手:
@Html.ActionLinkWithQueryString(fv.Range, "Search", new { sectionName = fv.Range …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过Adodb.Command使用以下查询命名参数,但没有运气.
Select * From mytable Where col1 = Lower(@param1) And col2 = Upper(@param2) And col3 = @param1
Run Code Online (Sandbox Code Playgroud)
代码我使用了类似的东西.
Dim cmd
Set cmd = Server.CreateObject("Adodb.Command")
cmd.NamedParameters = True
cmd.CommandType = adCmdText
cmd.CommandText = "Select * From mytable Where col1 = Lower(@param1) And col2 = Upper(@param2) And col3 = @param1"
cmd.Parameters.Append cmd.CreateParameter("@param1", adVarchar, adParamInput, 20, "some text 1")
cmd.Parameters.Append cmd.CreateParameter("@param2", adVarchar, adParamInput, 20, "some text 2")
Set cmd.ActiveConnection = cn
Dim rs
Set rs = cmd.Execute
Run Code Online (Sandbox Code Playgroud)
问题是,这会导致RDBMS端出错.
Microsoft OLE DB Provider for …Run Code Online (Sandbox Code Playgroud) 这是我的处理程序:
router.HandleFunc("/g/{gparam:.*}", MyHandler)
Run Code Online (Sandbox Code Playgroud)
但是当我传递类似“123://abc”之类的东西作为参数时,它会重定向并将url中的参数修改为“123:/abc”。
他们是一种避免这种情况的方法吗?
代码:
class AllTheColorsOfTheRainbow {
private int hue = 0;
int anIntegerRepresentingColors;
void changeTheHueOfTheColor(int newHue) {
this.hue = newHue;
}
public int getHue(){
return this.hue;
}
}
public class Ex11 {
public static void main(String [] args){
AllTheColorsOfTheRainbow a = new AllTheColorsOfTheRainbow();
a.changeTheHueOfTheColor(newHue = 1);
System.out.println(a.getHue());
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
javac Ex11.java
Ex11.java:18: error: cannot find symbol
a.changeTheHueOfTheColor(newHue = 1);
^
symbol: variable newHue
location: class Ex11
1 error
Run Code Online (Sandbox Code Playgroud)
这是什么意思,我该如何纠正?
在我去查看其他人的代码之前,我一直在尝试编写自己版本的memoizing装饰器.老实说,这更像是一种有趣的运动.然而,在玩耍的过程中,我发现我不能用装饰器做我想做的事情.
def addValue( func, val ):
def add( x ):
return func( x ) + val
return add
@addValue( val=4 )
def computeSomething( x ):
#function gets defined
Run Code Online (Sandbox Code Playgroud)
如果我想这样做,我必须这样做:
def addTwo( func ):
return addValue( func, 2 )
@addTwo
def computeSomething( x ):
#function gets defined
Run Code Online (Sandbox Code Playgroud)
为什么我不能以这种方式使用装饰器的关键字参数?我做错了什么,你能告诉我我应该怎么做吗?
当我在我的spring项目中运行此查询时,它只返回一个错误.我尝试了不同的方法,没有任何结果,如果有人可以帮助我会非常好.我有3个表:User,Role和User_Role,我的地址是嵌入的.也使用连接表.
所有其他类都是:User,Role和User_Role spring security
public List<User> getUsersByNameOrLogin(final String value){
List<User> result = new ArrayList<User>(0);
if(value ==null){
return result;
}
final StringBuilder jpql = new StringBuilder("SELECT u FROM User u WHERE ");
jpql.append(" u.lastname like "+value);
jpql.append(" OR u.firstname like "+value);
jpql.append(" OR u.email like "+value);
final String valueLike = "%"+value+"%";
result = entityManager.createQuery(jpql.toString(), User.class)
.setParameter("lastname", valueLike)
.setParameter("firstname", valueLike)
.setParameter("email", valueLike)
.getResultList();
return result;
}
Run Code Online (Sandbox Code Playgroud)
错误是:
无法解析属性:姓氏:用户[SELECT u FROM User u WHERE u.lastname like pappo or u.firstname like pappo or …
我想在 SQL 查询中使用 Map 的键集作为列表参数:
query = "select contentid from content where spaceid = :spaceid and title in (:title)"
sql.eachRow(query, [spaceid: 1234, title: map.keySet().join(',')]) {
rs ->
println rs.contentid
}
Run Code Online (Sandbox Code Playgroud)
我可以使用单个值,但不能使用集合或列表。这是我到目前为止所尝试过的:
map.keySet().join(',')
map.keySet().toListString()
map.keySet().toList()
map.keySet().toString()
Run Code Online (Sandbox Code Playgroud)
地图使用字符串作为键
Map<String, String> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
Run Code Online (Sandbox Code Playgroud)
另外,我没有收到错误。我只是没有打印任何内容,就像有一个空结果集一样。
在 kotlin 中,这是有效的:
LocalDate.of(2023, 1, 1)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用命名参数时,出现错误:
不能使用提供的参数调用以下函数:
public open fun of(p0: Int, p1: Month!, p2: Int): LocalDate! 在 java.time.LocalDate 中定义
public open fun of(p0: Int, p1: Int, p2: Int): LocalDate! 在 java.time.LocalDate 中定义
与任一:
LocalDate.of(year=2023, month = Month.JANUARY, dayOfMonth=1)
Run Code Online (Sandbox Code Playgroud)
或者
LocalDate.of(year=2023, month = 1, dayOfMonth=1)
Run Code Online (Sandbox Code Playgroud) 我正在更新一些旧的PHP代码并遇到了一个我不完全理解的问题.在mysql_*函数的旧时代,您可以在SQL查询中包含一个变量,如:
$query = "SELECT * FROM table $limit";
Run Code Online (Sandbox Code Playgroud)
哪里$limit = "LIMIT 0,50";.因此完整的查询是
$query = "SELECT * FROM table LIMIT 0,50";
Run Code Online (Sandbox Code Playgroud)
一切都很好.但是,对于PDO预处理语句和命名参数,除非您分解限制语句,否则这种类型的简单替换似乎不可能.例如:
$stmt = $conn->prepare('SELECT * FROM table :myLimit');
$stmt->execute(array(':myLimit'=>' LIMIT 0,50'));
Run Code Online (Sandbox Code Playgroud)
导致错误:
错误:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误; 检查与您的MySQL服务器版本对应的手册,以便在"?"附近使用正确的语法 在第1行
(在旁注上我发现错误完全没用,因为没有使用问号 - 但回到手头的问题)
但是,如果我将该查询更改为以下内容,以便进一步细分LIMIT:
$stmt = $conn->prepare('SELECT * FROM table LIMIT :start,:end ');
$stmt->execute(array(':start'=>0,':end'=>50));
Run Code Online (Sandbox Code Playgroud)
它很棒.
:myLimit作为命名参数和
array(':myLimit'=>' LIMIT 0,50')值的工作呢?php.net上的PDO页面有些含糊不清,当涉及到什么可以和不能用作命名参数时,我正在寻找比我发现的更深入的东西:
我目前正在使用PHP 5.1.6
named-parameters ×13
groovy ×2
java ×2
mysql ×2
sql ×2
ado ×1
arguments ×1
asp-classic ×1
asp.net-mvc ×1
c# ×1
dart ×1
decorator ×1
dynamic ×1
getter ×1
go ×1
gorilla ×1
hashtable ×1
jpa ×1
keyword ×1
kotlin ×1
methods ×1
pdo ×1
php ×1
python ×1
razor ×1
routevalues ×1
slash ×1
spring ×1
sql-server ×1
syntax-error ×1
vbscript ×1