这就是我所拥有的:
use activation::Activation;
use activation::Sigmoid;
pub struct MainStruct<T> {
activation: T
}
impl<T: Activation> MainStruct<T> {
pub fn new(activation: Option<T>) -> MainStruct<T>
where T: Activation
{
// default
let activation_fn = activation.unwrap_or(Sigmoid {});
MainStruct {
activation: activation_fn,
}
}
}
activation::Activation
是特征,Sigmoid
实现Activation
特征。我尝试做的是接受此特性作为输入,并且能够在None
时分配默认值,但我收到此错误:
expected type parameter, found struct `activation::Sigmoid`
不确定是什么问题或者我需要以某种方式告诉编译器Sigmoid实现类型T
(这是我们的特征)?
答案 0 :(得分:3)
当你有一个类型参数时,调用者决定它是什么类型。但是,当T
为Sigmoid
时,您会尝试强制activation
为None
。然而,来电者可以使用MainStruct::new
来呼叫None::<Widgetoid>
,并且签名称它应该返回MainStruct<Widgetoid>
。实际上,None
不仅仅是一个常数,而是一个无穷大的常数,每个T
一个。
不是在这里使用Option
,而是应该有两个不同的构造函数:一个直接接受Activation
的通用构造函数(不再是Option
),默认的构造函数不需要// Generic impl, generic constructor
impl<T: Activation> MainStruct<T> {
pub fn new(activation: T) -> MainStruct<T>
where T: Activation
{
MainStruct {
activation: activation,
}
}
}
// Specific impl, specific constructor
impl MainStruct<Sigmoid> {
pub fn default() -> MainStruct<Sigmoid> {
Self::new(Sigmoid {}) // delegate to generic constructor
}
}
参数。
default
您可能希望实现Default
特征,而不是使MainStruct::default()
成为固有的静态方法。 (Default
is in the prelude,因此您无需导入即可拨打impl Default for MainStruct<Sigmoid> {
fn default() -> MainStruct<Sigmoid> {
Self::new(Sigmoid {})
}
}
。)
<?php
function conn(){
$user = 'root';
$pass = '';
$db = 'proj';
$connection = mysqli_connect( "localhost", $user,$pass,$db);
if($connection){}
else{ die("Connection failed. Reason: ".mysqli_connect_error());}
return $connection;
}
function getRoom($dt){
$connection = conn();
$sql = "SELECT * FROM reservation WHERE Check_out = $dt";
$result = $connection->query($sql);
$row = mysqli_fetch_assoc($result);
$rn = $row['Room_Num'];
return $rn;
}
$date = '2017-03-25';
echo getRoom($date);