我上课了
class A{
String name
String address
}
def a = new A()
a.address = "some address"
println "${a.name} ${a.address}" => "null some address"
Run Code Online (Sandbox Code Playgroud)
这里a.name是null,所以打印的字符串将包含"null",但我希望结果是"some address"忽略null值.
我知道我可以println "${a.name ?: ''} ${a.address ?: ''}"在打印时使用,有没有更简单的解决方案?
我想将我的 servlet 映射到/*,但它因无限循环而失败。
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>my.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
Java代码是:
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response){
request.getRequestDispatcher("/WEB-INF/jsps/hello.jsp").forward(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我映射到/hello,一切正常。
当HelloServlet映射到 时/*,它也会被调用RequestDispatcher#forward()并导致无限循环。
这是怎么引起的,我该如何解决?
我有两个A和B类,它们都有一些选项,通常我会用一个Hash来存储选项,比如@options[:name]='xxxx'; 现在我想用元编程重构它,
class A
set_option :name, "james"
set_option :address, "some street"
def hello
puts @options[:name]
puts @options[:address]
end
end
class B
set_option :age, 18
def greeting
put @options[:age]
end
end
Run Code Online (Sandbox Code Playgroud)
这里我想用来set_option将键和值对设置为一个哈希实例@options,我该怎么办呢?
此外,我想将解决方案包装到一个单独的模块中.
更新:
首先,感谢你所有的答案对我都有价值,让我更清楚,现在我意识到我想要的东西不是那么正确,那么如果我提出这样的问题呢?
option来代替@options?@@options不起作用?我希望不同的类可以有不同的哈希实例.```像这样:
class A
set_option :name, "james"
set_option :provider, 'twitter'
def hello
puts option[:name]
end
end
class B
set_option :name, "not james"
def greeting
put option[:name]
end
end
Run Code Online (Sandbox Code Playgroud)
经过深思熟虑后,我认为我真正想要的是不同类的不同选项哈希实例,而不是类的实例.
这是我想要的,它可以工作.
module HasOptions
def …Run Code Online (Sandbox Code Playgroud)