导入伴侣对象或扩展特性中哪个更好

时间:2019-03-11 18:04:17

标签: scala spray-json companion-object

我有一个用Spray编写的JSON协议

# Create virtual machine
Write-Host "Creating virtual machine '$vmName' in resource group '$resourceGroupName'";
$virtualMachineConfig = New-AzVmConfig -VMName "$vmName" -VMSize "Standard_D2_v3" -IdentityType UserAssigned -IdentityID "$($userAssignedIdentity.Id)" `
                      | Set-AzVMOperatingSystem -CustomData $encodedScript -Windows -ComputerName "$vmname" -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate `
                      | Add-AzVMNetworkInterface -Id $nic.Id `
                      | Set-AzVMSourceImage -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2016-Datacenter' -Version latest `
                      | Set-AzVMBootDiagnostics -Enable -ResourceGroupName $resourceGroup.ResourceGroupName -StorageAccountName $bootDiagStorageAccount.StorageAccountName;

现在哪个更好?导入此伴侣对象或扩展特征?

2 个答案:

答案 0 :(得分:2)

如果要创建一些JsonFormat实例进行喷雾,则可以直接创建一个object,然后import。这意味着您只有一个隐式val和对象的实例。

object MyJsonProtocol extends DefaultJsonProtocol {
  implicit object MyTypeJsonFormat extends RootJsonFormat[MyType] {
    def write(v: MyType): JsValue = ...
    def read(value: JsValue): MyType = ...
  }

  implicit val myClassFormat = jsonFormat5(MyClass)
}

class OtherClass {
  import MyJsonProtocol._

  ...
}

答案 1 :(得分:0)

这取决于您的逻辑。如果定义一些隐式,则导入对象和扩展特征是不同的。如果导入,则定义与本地优先级相同的隐式。如果扩展,则与本地的相比,创建低优先级的隐式。